.gitlab-ci.yml
ファイルとは.gitlab-ci.yml
ファイルとは.gitlab-ci.yml
ファイルはパイプラインの構造と順序を定義し、以下のことを決めます。
■ジョブは .gitlab-ci.yml
ファイルの最も基本的な要素です。
ジョブの定義及び特徴:
ジョブとは、何をするかを定義するものです。例えば、コードをコンパイルしたり、テストしたりするジョブがあげられます。
使用例:
job1:
script: "execute-job1"
job2:
script: "execute-job2"
■stagesは、ジョブを含有するステージを定義するために使用され、パイプラインに対してグローバルに定義されます。
使用例:
stages:
- build
- test
- deploy
needs:キーワードにより、.gitlab-ci.ymlで有効非巡回グラフ(DAG)を実装でき、ジョブの実行順を柔軟にできます。
これにより、いくつかのジョブを他のジョブを待たずに実行することができ、ステージの順番を無視して複数のステージを同時に実行することができます。
使用例:
linux:build:
stage: build
mac:build:
stage: build
lint:
stage: test
needs: []
linux:rspec:
stage: test
needs: ["linux:build"]
linux:rubocop:
stage: test
needs: ["linux:build"]
mac:rspec:
stage: test
needs: ["mac:build"]
mac:rubocop:
stage: test
needs: ["mac:build"]
production:
stage: deploy
この例では、4つの実行パスを作成します。
GIT_CLEAN_FLAGS
変数は、ソースをチェックアウトした後のgit cleanのデフォルトの振る舞いを制御するために使用します。 グローバルに、あるいはジョブごとに設定することができます。variablesセクションで設定できます。
GIT_CLEAN_FLAGS
は、このコマンドで指定できるすべてのオプションを受け付けます。 git cleanコマンドのすべてのオプションを受け入れます。
使用例:
以下の「.gitlab-ci.yml」サンプルは[build-job]ジョブにて[mkdir projects]はprojectsのdirectoryを作成しましたが、次の[test-job]を実行される前に、自動的にclean up(Removing projects/)の処理を実行されますので、[build-job]ジョブで作成されたprojectsのdirectoryを削除されます。[test-job]ジョブに環境変数[GIT_CLEAN_FLAGS: -ffdx -e projects/]を指定すれば、[build-job]ジョブにて作成されたproject directory と file が削除しないように実現できます。
.gitlab-ci.yml
stages:
- build
- test
build-job:
stage: build
script:
- pwd
- ls
- mkdir projects
- cd projects
- echo $CI_JOB_NAME
test-job:
stage: test
variables:
GIT_CLEAN_FLAGS: -ffdx -e projects/
script:
- pwd
- ls
- echo $CI_JOB_NAME
include
パラメータを使用すると、このジョブが外部YAMLファイルを含むことを許可し、外部のYAMLファイルを含有することができます。これにより、CI/CDの設定を複数のファイルに分解し、長い設定ファイルの可読性を高めることができます。 また、テンプレートファイルを中央のリポジトリに保存し、プロジェクトにその設定ファイルを含めることも可能です。これは、すべてのプロジェクトのグローバルデフォルト変数など、設定の重複を避けるのに役立ちます。
include
は外部のYAMLファイルが拡張子.yml
か.yaml
を持っている必要があり、そうでなければ外部ファイルはインクルードされません。
include
は以下のインクルード方法をサポートしています。
方法 | 説明 |
local | ローカルのプロジェクトリポジトリからファイルをインクルードします。 |
file | 別のプロジェクトリポジトリからのファイルをインクルードします。 |
remote | リモートURLからのファイルをインクルードします。公開されている必要があります。 |
template | GitLabが提供しているテンプレートをインクルードします。 |
① include:local
include:local
は .gitlab-ci.yml
と同じリポジトリのファイルをインクルードします。 ルートディレクトリ(/)
からの相対的なフルパスを使用して参照されます。
設定ファイルと同じブランチにある、すでにGitで管理されているファイルしか使えません。つまり、include:local
を使う場合は、.gitlab-ci.yml
とローカルファイルの両方が同じブランチにあることを確認してください。
使用例:
include:
- local: '/templates/.gitlab-ci-template.yml'
② include:file
同じ GitLab インスタンスの下にある別のプライベートプロジェクトのファイルをインクルードするには、include:file を使用します。このファイルは、ルートディレクトリ(/)からの相対的なフルパスを使って参照されます。ref
も指定できますが、デフォルトはプロジェクトのHEAD
です。
使用例:
include:
- project: 'my-group/my-project'
ref: master
file: '/templates/.gitlab-ci-template.yml'
③ include:remote
include:remote
を使用すると、別の場所からのファイルをインクルードすることができます。 HTTP/HTTPS を使用して、完全な URL を使用して参照されます。リモートURLの認証スキーマはサポートされていないため、リモートファイルは単純なGETリクエストで公開されなければなりません。
使用例:
include:
- remote: 'https://gitlab.com/awesome-project/raw/master/.gitlab-ci-template.yml'
publicアクセスできない別のproject (GitLab.com のprivate projectsなど) のファイルにアクセスしたい場合は、URL の基本的な認証スキーマも include 値の変数もまだサポートされていないため、本来はアクセスできませんが、しかし、下記の裏技でinclude可能となります。
使用例:
include:
- remote: 'https://gitlab.com/api/v4/projects/123456/repository/files/templates%2F.ci-deploy-lib.yml/raw?ref=master&private_token=ABCDEFG&fmt=.yml'
認証スキーマ(Token)は環境変数にすることができないのは残念な点なのですが、上記ようなURLに直接にTokenを埋めるより、publicアクセス権限ないprivate projectのYAMLファイルをincludeすることができます。
④ include:template
include:template
を使うと、GitLabに同梱されている.gitlab-ci.yml
のテンプレートをインクルードすることができます。複数ファイルのinclude:template
: もインクルードすることができます。
使用例:
include:
- template: Android-Fastlane.gitlab-ci.yml
- template: Auto-DevOps.gitlab-ci.yml