展開のためのgitlab継続的統合の使用

最近では、gitlabがライバルのgithubのバージョン8.0を公開しました。 興味深いことに、継続的インテグレーションエンジンがプラットフォームに組み込まれました。 つまりgitlab.comのすべての人が無料のサービスとして利用できるということです。 これにより、無料のプライベートリポジトリとともに、gitlabクラウドサービスはコードを保存するだけでなく、テストとデプロイの便利な場所になります。 後者については後ほど説明します。




継続的インテグレーションとは、新しいコードをリポジトリにプッシュするときに単体テストを起動することだけではありません。 また、製品を構築し、店舗、ウェブサイト、その他の流通チャネルに公開する機会でもあります。 クラウドテレフォニーvoximplantは、クラウドに配置され、コマンド「外部」または着信コールが到着したときに実行されるJavaScriptスクリプトを使用します。 多くのスクリプトクライアントは、管理パネルに組み込まれたテキストエディターを使用します。これは、単純な場合に非常に適しています。 しかし、Bitrix24テレフォニーなどの複雑なクラウドシステムを開発およびサポートする場合は、もっと深刻なものが必要です。




voximplantを作成するとき、herokuのようにプッシュデプロイしないことにしました。 私たちのクライアントの多くにとって、主要なビジネスはソフトウェア開発に関係しておらず、彼らとgitを対面させることはあまり良くありません。 しかし、「スクリプトをデプロイする」機能を備えたHTTP APIがあります。これは、スクリプトをgitlabに保存し、シェルスクリプトとcurlを使用してデプロイできることを人々に理解するのに役立ちます。 ほとんどのクライアントはこれを行いますが、このアプローチには重大な欠点があります。スクリプトを呼び出すことを忘れないでください。 さらに、コードが運用ブランチに起動されている場合にのみ呼び出す必要があります。 そして、テストに合格した後にのみ。 一般的に、間違いを犯すには多くの方法があります。




gitlabで継続的インテグレーションを設定する





デフォルトでは、hitlabでの継続的統合は無効になっているため、設定で有効にする必要があります。











左側のメニューでプロジェクト設定をオンにすると、いくつかの新しい項目が表示されます。最も興味深いのは「ランナー」です。 hitlabの継続的な統合は次のように機能します。



  1. リポジトリにプッシュします
  2. プロジェクトのルートに.gitlab-ci.ymlファイルがある場合、 gitlabはこのプロジェクトに継続的統合が使用されることを理解します。
  3. Gitlabは、このプロジェクトまたは任意のプロジェクトに接続している実行中のランナーを探しています。 ランナーは、通常は個別のコンピューターで実行され、実際に継続的な統合を実行するアプリケーションです:テストの実行、実行可能ファイルの収集、およびデプロイ。 たとえば、ケシでランナーを実行して、iOS用のアプリケーションを構築できます。 「gitlab public runner」を使用できますが、これらはあまり安全ではなく、通常、着信タスクキューには多くの時間があります。
  4. Gitlabはyamlファイルをランナーに渡し、ランナーはリポジトリ内のソースを更新し、このファイルに記述されているコマンドを実行します。 コマンドは、たとえばvoximplantクラウドにスクリプトを展開するだけの簡単なものにすることができます。 とても複雑:Dockerコンテナーの起動、プロジェクトのビルド、テストの実行など。
  5. スクリプトの実行後、ランナーは、対応するコミットの横に表示できる結果をヒットラボに報告します。




gitlab ciランナーをインストールする



この例では、開発者のマシンでランナーを実行します。 windows / linux / osxのインストール手順は、 公式Webサイトで入手できます。インストール後、コマンドラインユーティリティgitlab-ci-multi-runnerを自由に使用できます。 実行中のランナーはhitlabに接続し、ビルドタスクを待ちます。 しかし、gitlabはどのランナーにどのタスクを与えるべきかをどのようにして見つけるのでしょうか? ランナーをアカウントとプロジェクト(または複数のプロジェクト)に「バインド」するには、 登録キーを使用してgitlab-ci-multi-runnerを呼び出し、接続パラメーターを入力する必要があります:url gitlab(gitlabはネットワーク上にローカルにデプロイできるため)および登録トークン、実際には、アカウント/プロジェクトを定義します:











登録されたランナーは、 gitlab-ci-multi-runner runコマンドによって起動され、 gitlabからのタスクを待ちます。 コマンドラインスイッチを使用して、ランナーをインストールして起動 すると、オペレーティングシステムの再起動後に自動的に開始されるように、システムにサービスとして登録できます。



展開のための継続的統合構成



すでに書いたように、継続的な統合タスクは.gitlab-ci.ymlファイルに記述されており、プロジェクトのルートに配置する必要があります。 レアアースYAML構文は、JSONに代わる人間が読める形式の一種であり、ドキュメントは公式Webサイトで入手できます。 プロジェクトをvoximplantにデプロイするための構成ファイルは可能な限りシンプルで、 ドキュメントで説明されているように1つのHTTP API呼び出しを行うだけです。 curlがインストールされているコンピューターでランナーが実行されており、スクリプトコードがScenario.jsファイルにあるという前提に基づいて、展開の構成ファイルは次のようになります(簡略化された例。これは大きくなります。たとえば、api_keyは環境変数に入れるのが適切です) 、 nmikeコメントを参照):



before_script: - npm install stages: - deploy deploy: script: - curl -X POST "https://api.voximplant.com/platform_api/SetScenarioInfo/?account_id=1&api_key=2&required_scenario_name=foo" --data-urlencode scenario_script@scenario.js
      
      







CurlはAPIの構文糖を使用します。これは、渡されたurlのクエリコンポーネントとhttpリクエストの本文の両方で引数を取ることができます。



継続的インテグレーションを機能させるには、リポジトリにプッシュするだけで十分です:gitlabは.gitlab-ci.ymlファイルを検出し、接続されたランナーを見つけ、このファイルの内容をそこに転送します。ランナーはリポジトリのコピーを更新し、クラウドにソースコードをアップロードするデプロイメントスクリプトを実行します。



質問、説明、コメントはありますか? Gitlab対Jenkins対Bamboo対Teamcity?



All Articles