- 1つの設定ファイルをインクルードします
- 設定ファイルの配列をインクルードします。
- 内部設定ファイルから
default
設定を使用します。 - 含まれる設定値の上書き
- 含まれる設定配列のオーバーライド
- ネストされたインクルードを使います
- 変数を
include
-
rules
。include
- ワイルドカードファイルパスで
include:local
を使用します。 -
include
で追加された設定の入力を定義します。 - トラブルシューティング
他のファイルからCI/CD設定を使用
include
を使って CI/CD ジョブに外部の YAML ファイルを含めることができます。
1つの設定ファイルをインクルードします
単一の設定ファイルをインクルードするには、以下のいずれかの構文オプションを使用します:
-
include
を単独で使用します。これが内部ファイルの場合は、include:local
と同じです。リモート・ファイルの場合は、include:remote
と同じです。include: '/templates/.after-script-template.yml'
設定ファイルの配列をインクルードします。
設定ファイルの配列を含めることができます:
-
include
タイプを指定しない場合、各配列項目のデフォルトはinclude:local
またはinclude:remote
になります:include: - 'https://gitlab.com/awesome-project/raw/main/.before-script-template.yml' - '/templates/.after-script-template.yml'
-
単一項目の配列を定義できます:
include: - remote: 'https://gitlab.com/awesome-project/raw/main/.before-script-template.yml'
-
配列を定義し、複数の
include
タイプを明示的に指定できます:include: - remote: 'https://gitlab.com/awesome-project/raw/main/.before-script-template.yml' - local: '/templates/.after-script-template.yml' - template: Auto-DevOps.gitlab-ci.yml
-
デフォルトの型と特定の型
include
の両方を組み合わせた配列を定義できます:include: - 'https://gitlab.com/awesome-project/raw/main/.before-script-template.yml' - '/templates/.after-script-template.yml' - template: Auto-DevOps.gitlab-ci.yml - project: 'my-group/my-project' ref: main file: '/templates/.gitlab-ci-template.yml'
内部設定ファイルからdefault
設定を使用します。
設定ファイルでdefault
セクションを定義できます。include
キーワードでdefault
セクションを使用すると、デフォルトがパイプライン内のすべてのジョブに適用されます。
例えば、default
セクションをbefore_script
.
/templates/.before-script-template.yml
という名前のカスタム設定ファイルの内容:
default:
before_script:
- apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
- gem install bundler --no-document
- bundle install --jobs $(nproc) "${FLAGS[@]}"
.gitlab-ci.yml
の内容:
include: '/templates/.before-script-template.yml'
rspec1:
script:
- bundle exec rspec
rspec2:
script:
- bundle exec rspec
デフォルトのbefore_script
コマンドは、script
コマンドの前に、rspec
ジョブの両方で実行されます。
含まれる設定値の上書き
include
キーワードを使用すると、含まれる設定値をオーバーライドして、パイプラインの要件に適合させることができます。
次の例は、.gitlab-ci.yml
ファイルでカスタマイズされたinclude
ファイルを示しています。特定の YAML 定義変数とproduction
ジョブの詳細がオーバーライドされます。
autodevops-template.yml
という名前のカスタム設定ファイルの内容:
variables:
POSTGRES_USER: user
POSTGRES_PASSWORD: testing_password
POSTGRES_DB: $CI_ENVIRONMENT_SLUG
production:
stage: production
script:
- install_dependencies
- deploy
environment:
name: production
url: https://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
.gitlab-ci.yml
の内容:
include: 'https://company.com/autodevops-template.yml'
default:
image: alpine:latest
variables:
POSTGRES_USER: root
POSTGRES_PASSWORD: secure_password
stages:
- build
- test
- production
production:
environment:
url: https://domain.com
POSTGRES_USER
とPOSTGRES_PASSWORD
変数、および.gitlab-ci.yml
ファイルで定義されたproduction
ジョブのenvironment:url
は、autodevops-template.yml
ファイルで定義された値を上書きします。他のキーワードは変更されません。この方法はマージと呼ばれます。
のマージメソッドinclude
include
設定はこの処理でメイン設定ファイルにマージされます:
- インクルードされたファイルは設定ファイルで定義された順番で読み込まれ、インクルードされた設定は同じ順番でマージされます。
- インクルードされたファイルが
include
,include
も使っている場合は、include
その入れ子になったinclude
設定が (再帰的に) 最初にマージされます。 - パラメータが重複している場合は、最後にインクルードされたファイルが優先され、インクルードされたファイルから設定がマージされます。
-
include
で追加されたすべての設定がマージされた後、メインの設定がインクルードされた設定にマージされます。
このマージ方法は_ディープマージで_、ハッシュマップは設定内の任意の深さでマージされます。ハッシュマップ “A”(これまでにマージされた設定を含む)と “B”(次の設定を含む)をマージするために、キーと値は次のように処理されます:
- キーがAにしか存在しない場合、Aのキーと値を使います。
- キーがAとBの両方に存在し、それらの値が両方ともハッシュマップである場合、それらのハッシュマップをマージします。
- キーが A と B の両方に存在し、どちらかの値がハッシュマップでない場合は、B の値を使用します。
- そうでない場合は、B のキーと値を使います。
例えば、2つのファイルで構成される設定の場合:
-
.gitlab-ci.yml
:include: 'common.yml' variables: POSTGRES_USER: username test: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: manual artifacts: reports: junit: rspec.xml
-
common.yml
:variables: POSTGRES_USER: common_username POSTGRES_PASSWORD: testing_password test: rules: - when: never script: - echo LOGIN=${POSTGRES_USER} > deploy.env - rake spec artifacts: reports: dotenv: deploy.env
マージ結果は以下の通り:
variables:
POSTGRES_USER: username
POSTGRES_PASSWORD: testing_password
test:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual
script:
- echo LOGIN=${POSTGRES_USER} > deploy.env
- rake spec
artifacts:
reports:
junit: rspec.xml
dotenv: deploy.env
この例では:
- 変数が評価されるのは、すべてのファイルがマージされた後です。インクルードされたファイルのジョブは、別のファイルで定義された変数値を使用することになるかもしれません。
-
rules
は配列なのでマージできません。トップレベルのファイルが優先されます。 -
artifacts
はハッシュマップなので、ディープマージできます。
含まれる設定配列のオーバーライド
マージを使って、インクルードされたテンプレート内の設定を拡張したり上書きしたりすることはできますが、配列内の個々の項目を追加したり変更したりすることはできません。例えば、拡張されたproduction
ジョブのscript
配列に追加のnotify_owner
コマンドを追加する場合:
autodevops-template.yml
の内容:
production:
stage: production
script:
- install_dependencies
- deploy
.gitlab-ci.yml
の内容:
include: 'autodevops-template.yml'
stages:
- production
production:
script:
- install_dependencies
- deploy
- notify_owner
install_dependencies
とdeploy
が.gitlab-ci.yml
ファイルで繰り返されない場合、production
ジョブのスクリプトはnotify_owner
のみとなります。
ネストされたインクルードを使います
include
設定ファイルのセクションを include
ネストしてinclude
、別の設定に include
含めることができます。例えば、キーワードが3つネストしているinclude
場合 include
:
.gitlab-ci.yml
の内容:
include:
- local: /.gitlab-ci/another-config.yml
/.gitlab-ci/another-config.yml
の内容:
include:
- local: /.gitlab-ci/config-defaults.yml
/.gitlab-ci/config-defaults.yml
の内容:
default:
after_script:
- echo "Job complete."
includes
、重複する内部インクルードを使用します。
GitLab 14.8 で導入されました。
ネストされたインクルードは同じ設定ファイルをインクルードすることができます。重複した設定ファイルは複数回インクルードされますが、その効果は一度だけインクルードされた場合と同じです。
たとえば、defaults.gitlab-ci.yml
が複数回インクルードされている場合、次のように入れ子になります:
-
.gitlab-ci.yml
ファイルの内部:include: - template: defaults.gitlab-ci.yml - local: unit-tests.gitlab-ci.yml - local: smoke-tests.gitlab-ci.yml
-
defaults.gitlab-ci.yml
ファイルの内部:default: before_script: default-before-script.sh retry: 2
-
unit-tests.gitlab-ci.yml
ファイルの内部:include: - template: defaults.gitlab-ci.yml unit-test-job: script: unit-test.sh retry: 0
-
smoke-tests.gitlab-ci.yml
ファイルの内部:include: - template: defaults.gitlab-ci.yml smoke-test-job: script: smoke-test.sh
最終的な設定は次のようになります:
unit-test-job:
before_script: default-before-script.sh
script: unit-test.sh
retry: 0
smoke-test-job:
before_script: default-before-script.sh
script: smoke-test.sh
retry: 2
変数をinclude
- GitLab 13.8 で導入されました。
- GitLab 13.9で機能フラグを削除しました。
- GitLab 14.2でプロジェクト、グループ、インスタンス変数に対応。
- GitLab 14.5でパイプライン変数に対応しました。
.gitlab-ci.yml
ファイルのinclude
セクションで使用できます:
- プロジェクト変数。
- グループの変数。
- インスタンス変数。
- プロジェクト定義済み変数(
CI_PROJECT_*
). -
GitLab 14.2以降では、
$CI_COMMIT_REF_NAME
定義済み変数。include
で使用する場合、CI_COMMIT_REF_NAME
変数はrefs/heads/branch-name
のように完全な参照パスを返します。include:rules
では、(== main
ではなく)if: $CI_COMMIT_REF_NAME =~ /main/
を使う必要があるかもしれません。この動作は GitLab 14.5 で解決されました。
GitLab 14.5以降では、次のように使うこともできます:
- トリガー変数。
- スケジュールされたパイプライン変数。
- 手動パイプライン実行変数。
-
CI_PIPELINE_SOURCE
とCI_PIPELINE_TRIGGERED
定義済み変数。
使用例:
include:
project: '$CI_PROJECT_PATH'
file: '.compliance-gitlab-ci.yml'
ジョブで定義された変数や、すべてのジョブのデフォルト変数を定義するグローバルなvariables
セクションで定義された変数を使用することはできません。インクルードはジョブの前に評価されるため、これらの変数はinclude
で使用できません。
定義済みの変数をインクルードする方法と、その変数が CI/CD ジョブに与える影響の例については、このCI/CD 変数のデモを参照してください。
rules
。include
include
と一緒にrules
を使うことで、他の設定ファイルを条件付きでインクルードすることができます。
rules
を使用できるのは、特定の変数とこれらのキーワードだけです:
include
とともにrules:if
rules:if
を使って、CI/CD変数の状態に基づいて他の設定ファイルを条件付きでインクルードします。例えば
include:
- local: builds.yml
rules:
- if: $DONT_INCLUDE_BUILDS == "true"
when: never
- local: builds.yml
rules:
- if: $ALWAYS_INCLUDE_BUILDS == "true"
when: always
- local: builds.yml
rules:
- if: $INCLUDE_BUILDS == "true"
- local: deploys.yml
rules:
- if: $CI_COMMIT_BRANCH == "main"
test:
stage: test
script: exit 0
include
とともにrules:exists
rules:exists
を使って、ファイルの存在に基づいて他の設定ファイルを条件付きでインクルードします。例えば
include:
- local: builds.yml
rules:
- exists:
- exception-file.md
when: never
- local: builds.yml
rules:
- exists:
- important-file.md
when: always
- local: builds.yml
rules:
- exists:
- file.md
test:
stage: test
script: exit 0
この例では、GitLabは現在のプロジェクトにfile.md
。
rules:exists
でinclude
を設定し、別のプロジェクトの設定ファイルを追加する場合、既知のイシューがあります。GitLabは_他の_プロジェクトにファイルが存在するかチェックします。例えば
include:
- project: my-group/my-project-2
ref: main
file: test-file.yml
rules:
- exists:
- file.md
test:
stage: test
script: exit 0
この例では、GitLabは現在のプロジェクトではなく、my-group/my-project-2
にあるtest-file.yml
の存在をチェックします。この動作を改善するための作業については、イシュー386040に従ってください。
include
とともにrules:changes
GitLab 16.4 で
ci_support_include_rules_changes
というフラグで 導入されたrules:changes
のサポート。デフォルトでは無効になっています。
rules:changes
を使って、変更されたファイルに基づいて他の設定ファイルを条件付きでインクルードします。例えば
include:
- local: builds1.yml
rules:
- changes:
- Dockerfile
- local: builds2.yml
rules:
- changes:
paths:
- Dockerfile
compare_to: 'refs/heads/branch1'
when: always
- local: builds3.yml
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- Dockerfile
test:
stage: test
script: exit 0
この例では:
-
builds1.yml
は、Dockerfile
が変更された場合に含まれます。 -
builds2.yml
は、Dockerfile
がrefs/heads/branch1
に対して相対的に変更された場合に含まれます。 -
builds3.yml
は、Dockerfile
が変更され、パイプラインソースがマージリクエストイベントである場合に含まれます。
ワイルドカードファイルパスでinclude:local
を使用します。
ワイルドカードパス (*
と**
) をinclude:local
で使用することができます。
使用例:
include: 'configs/*.yml'
パイプラインが実行されると、GitLab:
-
configs
ディレクトリにある全ての.yml
ファイルをパイプライン設定に追加します。 -
configs
ディレクトリのサブフォルダにある.yml
ファイルは追加しません。これを許可するには、以下の設定を追加します:# This matches all `.yml` files in `configs` and any subfolder in it. include: 'configs/**.yml' # This matches all `.yml` files only in subfolders of `configs`. include: 'configs/**/*.yml'
include
で追加された設定の入力を定義します。
GitLab 15.11でベータ機能として導入されました。
フラグ:spec
とwith
は実験的なオープンベータ機能であり、予告なく変更される場合があります。
入力パラメータをspec:inputs
include
でパイプラインに追加する CI/CD 設定の入力パラメータを定義するにはspec:inputs
を使用します。include:inputs
を使用して、パイプラインの実行時に使用する値を定義します。
specは設定ファイルの先頭、ヘッダーセクションで宣言する必要があります。ヘッダーは---
で残りの設定から分離します。
ヘッダーセクションの外部で値を参照するには、補間フォーマット$[[ input.input-id ]]
を使用します。入力の評価と補間は、パイプラインの作成中に設定が取得されるときに一度だけ行われますが、設定が.gitlab-ci.yml
の内容とマージされる前に行われます。
spec:
inputs:
environment:
job-stage:
---
scan-website:
stage: $[[ inputs.job-stage ]]
script: ./scan-website $[[ inputs.environment ]]
spec:inputs
:
- 定義された入力はデフォルトで必須です。
- 入力は、
default
を指定することでオプションにすることができます。 デフォルト値を指定しない場合は、default: null
を使用します。 - 補間ブロックを含む文字列は1MBを超えてはいけません。
- 補間ブロック内の文字列は1KBを超えてはいけません。
例えば、custom_configuration.yml
:
spec:
inputs:
website:
user:
default: 'test-user'
flags:
default: null
---
# The pipeline configuration would follow...
この例では:
-
website
は必須で、必ず定義しなければなりません。 -
user
はオプションです。定義されていない場合、値はtest-user
になります。 -
flags
は省略可能です。定義されていない場合、値はありません。
入力値を操作する関数の指定
GitLab 16.3 で導入されました。
補間ブロックの中で定義済みの関数を指定し、入力値を操作することができます。サポートされているフォーマットは以下の通りです:
$[[ input.input-id | <function1> | <function2> | ... <functionN> ]]
詳細
- 事前に定義された補間関数のみが許可されます。
- 1つの補間ブロックに指定できる関数は3つまでです。
- 関数は指定された順番に実行されます。
spec:
inputs:
test:
default: '0123456789'
---
test-job:
script: echo $[[ inputs.test | truncate(1,3) ]]
この例では:
- 関数
truncate
はinputs.test
の値に適用されます。 -
inputs.test
の値を0123456789
とすると、script
の出力はecho 123
となります。
定義済みの補間関数
切り捨て
truncate
を使って補間値を短くします。例えば
truncate(<offset>,<length>)
名前 | 種類 | 説明 |
---|---|---|
offset | 整数 | オフセットする文字数。 |
length | 整数 | オフセットの後に返す文字数。 |
使用例:
$[[ inputs.test | truncate(3,5) ]]
inputs.test
の値を0123456789
とすると、出力は34567
となります。
入力パラメータ値をinclude:inputs
include:with
GitLab 16.0ではinclude:inputs
に改名されました。
include:inputs
を使って、インクルードされた設定がパイプラインに追加される際にパラメータの値を設定します。
例えば、上記の例と同じ仕様のcustom_configuration.yml
をインクルードする場合:
include:
- local: 'custom_configuration.yml'
inputs:
website: "My website"
この例では:
-
website
にはMy website
という値が含まれています。 -
user
の値はtest-user
で、これは指定されていない場合のデフォルトだからです。 -
flags
は値を持ちません。これは省略可能で、指定されない場合のデフォルトがないからです。
複数のファイルでinclude:inputs
を使用します。
inputs
は、インクルードされるファイルごとに個別に指定する必要があります。例えば
include:
- component: gitlab.com/org/my-component@1.0
inputs:
stage: my-stage
- local: path/to/file.yml
inputs:
stage: my-stage
同じファイルを異なる入力で複数回インクルードすることもできます。例えば
include:
- local: path/to/my-super-linter.yml
inputs:
type: docs
job-name: lint-docs
lint-path: "doc/"
- local: path/to/my-super-linter.yml
inputs:
type: yaml
job-name: lint-yaml
lint-path: "data/yaml/"
トラブルシューティング
Maximum of 150 nested includes are allowed!
エラー
パイプラインのネストされたインクルードファイルの最大数は150です。パイプラインでMaximum 150 includes are allowed
のエラーメッセージが表示される場合は、次のいずれかが考えられます:
- ネストされた設定の一部に、
include
追加のネストされた設定が過度に多く含まれています。 - ネストされたincludeに偶発的なループがあります。例えば、
include1.yml
はinclude2.yml
をインクルードし、その はinclude1.yml
をインクルードし、再帰ループを作成します。
このようなことが起こるリスクを減らすために、パイプラインエディターでパイプライン設定ファイルを編集します。一度に1つのインクルードファイルを削除して、どの設定ファイルがループや過剰なインクルードファイルの原因かを絞り込むことができます。
GitLab 16.0以降のセルフマネージドユーザーは、インクルードファイルの最大値を変更することができます。