HackPig520

HackPig520 的博客

我是HackPig520,一个前端工程师,喜欢Web3和Minecraft。
github
gitlab
bilibili
tg_channel
keybase
email
twitter
zhihu
pixiv

GitLab CIを使用して継続的インテグレーションを行います。

この記事では、アプリケーション設計で一般的なコンポーネントとその役割について説明します。

紹介#

GitLab 8.0 以降、GitLab CI は GitLab に統合されています。プロジェクトに .gitlab-ci.yml ファイルを追加し、Runner を追加するだけで、継続的インテグレーションを行うことができます。さらに、GitLab のアップグレードに伴い、GitLab CI はますます強力になりました。この記事では、GitLab CI を使用して継続的インテグレーションを行う方法について説明します。

いくつかの概念#

GitLab CI を紹介する前に、関連する継続的インテグレーションの概念を見てみましょう。

パイプライン#

パイプラインは、ビルドタスクの 1 回分であり、依存関係のインストール、テスト実行、コンパイル、テストサーバーへのデプロイ、本番サーバーへのデプロイなど、複数のプロセスを含むことができます。コミットまたはマージリクエストのマージは、パイプラインをトリガーすることができます。以下の図に示すように。

+------------------+           +----------------+
|                  |  トリガー  |                |
|   コミット / MR   +---------->+   パイプライン   |
|                  |           |                |
+------------------+           +----------------+

ステージ#

ステージはビルドの段階を表します。つまり、前述のプロセスです。1 つのパイプライン内で複数のステージを定義できます。これらのステージには次の特徴があります。

すべてのステージは順番に実行されます。つまり、1 つのステージが完了すると、次のステージが開始されます。
すべてのステージが完了すると、ビルドタスク(パイプライン)が成功します。
ステージのいずれかが失敗すると、その後のステージは実行されず、ビルドタスク(パイプライン)は失敗します。
したがって、ステージとパイプラインの関係は次のとおりです。

+--------------------------------------------------------+
|                                                        |
|  パイプライン                                           |
|                                                        |
|  +-----------+     +------------+      +------------+  |
|  |  ステージ1  |---->|   ステージ2  |----->|   ステージ3  |  |
|  +-----------+     +------------+      +------------+  |
|                                                        |
+--------------------------------------------------------+

ジョブ#

ジョブはビルドの作業を表し、特定のステージで実行される作業を示します。ステージ内で複数のジョブを定義できます。これらのジョブには次の特徴があります。

同じステージ内のジョブは並行して実行されます。
同じステージ内のすべてのジョブが成功した場合、そのステージは成功します。
ジョブのいずれかが失敗すると、そのステージは失敗し、ビルドタスク(パイプライン)は失敗します。
したがって、ジョブとステージの関係図は次のとおりです。

+------------------------------------------+
|                                          |
|  ステージ1                                 |
|                                          |
|  +---------+  +---------+  +---------+   |
|  |  ジョブ1  |  |  ジョブ2  |  |  ジョブ3  |   |
|  +---------+  +---------+  +---------+   |
|                                          |
+------------------------------------------+

紹介#

Runner を設定したら、プロジェクトのルートディレクトリに .gitlab-ci.yml ファイルを追加する必要があります。 .gitlab-ci.yml ファイルを追加すると、コードのコミットや MR のマージごとに自動的にビルドタスクが実行されます。

パイプラインはどのようにトリガーされるか覚えていますか?パイプラインもコードのコミットや MR のマージによってトリガーされます!では、パイプラインと .gitlab-ci.yml の関係は何でしょうか?実際、.gitlab-ci.yml はパイプラインを定義するだけです!

基本的な書き方#

.gitlab-ci.yml の書き方を見てみましょう。

# ステージを定義
stages:
  - build
  - test

# ジョブを定義
job1:
  stage: test
  script:
    - echo "I am job1"
    - echo "I am in test stage"

# ジョブを定義
job2:
  stage: build
  script:
    - echo "I am job2"
    - echo "I am in build stage"

簡単ですね!stages キーワードを使用して、パイプラインの各ビルド段階を定義し、いくつかの非キーワードを使用してジョブを定義します。各ジョブでは、stage キーワードを使用して、そのジョブがどのステージに対応するかを指定します。ジョブ内の script キーワードは、最も重要な部分であり、各ジョブが実行するコマンドを表します。

以前に説明したステージとジョブの関係を思い出し、上記の例の実行結果を予想してみましょう。

I am job2
I am in build stage
I am job1
I am in test stage

はい、stages で定義したように、build ステージは test ステージよりも前に実行されるため、stage:build のジョブが最初に実行され、その後 stage:test のジョブが実行されます。

よく使われるキーワード#

以下はよく使われるキーワードのいくつかです。詳細な内容については、公式ドキュメントを参照してください。

stages

ステージを定義します。デフォルトでは、build、test、deploy の 3 つのステージがあります。

types

stages の別名です。

before_script

すべてのジョブの実行前に実行されるコマンドを定義します。

after_script

GitLab 8.7+ および GitLab Runner 1.2+ が必要です。

すべてのジョブの実行後に実行されるコマンドを定義します。

variables && Job.variables

GitLab Runner 0.5.0+ が必要です。

環境変数を定義します。ジョブレベルの環境変数が定義されている場合、そのジョブはジョブレベルの環境変数を優先して使用します。

cache && Job.cache

GitLab Runner 0.7.0+ が必要です。

キャッシュする必要のあるファイルを定義します。各ジョブの開始時に、Runner は.gitignore ファイル内のファイルを削除します。一部のファイル(例:node_modules/)を複数のジョブで共有する必要がある場合、各ジョブで npm install を実行するしかありません。これは非常に不便ですので、これらのファイルをキャッシュする必要があります。キャッシュされたファイルは、ジョブ間だけでなく、パイプライン間でも使用できます。

具体的な使用方法については、公式ドキュメントを参照してください。

Job.script

ジョブが実行するコマンドを定義します。必須項目です。

Job.stage

ジョブのステージを定義します。デフォルトは test です。

Job.artifacts

ジョブで生成されたアーティファクトを定義します。ジョブが成功した後、生成されたファイルはアーティファクト(バイナリファイルなど)として保持され、GitLab にパッケージ化され、その後、GitLab のプロジェクトページからそのアーティファクトをダウンロードできます。注意:artifacts と cache を混同しないでください。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。