GitLab CI/CDの例
GitLab CI YAML リファレンスにあるincludes
の例 に加えて、このページではinclude
の使い方のバリエーションを紹介します。
単一の文字列または複数の値の配列
単独の文字列もしくは複数の値の配列として追加の YAML ファイルをインクルードできます。 次の例はすべて有効です。
include:local
メソッドを暗示する単一の文字列:
include: '/templates/.after-script-template.yml'
include
メソッドを含む配列:
include:
- 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
- '/templates/.after-script-template.yml'
include
メソッドを明示的に指定した単一の文字列:
include:
remote: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
配列。include:remote
は単一項目:
include:
- remote: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
複数のinclude
メソッドを明示的に指定した配列:
include:
- remote: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
- local: '/templates/.after-script-template.yml'
- template: Auto-DevOps.gitlab-ci.yml
配列の混合構文:
include:
- 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
- '/templates/.after-script-template.yml'
- template: Auto-DevOps.gitlab-ci.yml
- project: 'my-group/my-project'
ref: master
file: '/templates/.gitlab-ci-template.yml'
before_script
テンプレートの再利用
以下の例では、.before-script-template.yml
の内容が自動的に取得され、.gitlab-ci.yml
の内容とともに評価されます。
https://gitlab.com/awesome-project/raw/master/.before-script-template.yml
の内容:
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: 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml'
rspec:
script:
- bundle exec rspec
外部テンプレート値のオーバーライド
次の例は、.gitlab-ci.yml
でカスタマイズされているインクルードファイルから、特定の YAML で定義された変数とproduction
ジョブの詳細を示しています。
https://company.com/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
only:
- master
.gitlab-ci.yml
の内容:
include: 'https://company.com/autodevops-template.yml'
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
は、autodevops-template.yml
で定義されたproduction
ジョブの環境 URL とともに、.gitlab-ci.yml
で定義された新しい値で上書きされています。
マージによってディクショナリ・マッピングを拡張したり上書きしたりできますが、包含された配列に項目を追加したり変更したりすることはできません。 たとえば、本番ジョブのスクリプトに項目を追加するには、既存のスクリプト項目を繰り返す必要があります:
https://company.com/autodevops-template.yml
の内容:
production:
stage: production
script:
- install_dependencies
- deploy
.gitlab-ci.yml
の内容:
include: 'https://company.com/autodevops-template.yml'
stages:
- production
production:
script:
- install_dependencies
- deploy
- notify_owner
この場合、install_dependencies
とdeploy
が.gitlab-ci.yml
で繰り返されなければ、これらは結合 CI 構成のproduction
ジョブのスクリプトの一部にはなりません。
ネストされたインクルードの使用
以下の例では、さまざまなメソッドを組み合わせて、異なるソースからインクルードをネストする方法を示しています。
この例では、.gitlab-ci.yml
は、/.gitlab-ci/another-config.yml
というファイルを内部に含んでいます:
include:
- local: /.gitlab-ci/another-config.yml
/.gitlab-ci/another-config.yml
には、別のプロジェクトのテンプレートと/templates/docker-workflow.yml
ファイルが含まれています:
include:
- template: Bash.gitlab-ci.yml
- project: group/my-project
file: /templates/docker-workflow.yml
/templates/docker-workflow.yml
group/my-project
には、.NETの2つの group/my-project
内部ファイルがgroup/my-project
含まれて group/my-project
います:
include:
- local: /templates/docker-build.yml
- local: /templates/docker-testing.yml
group/my-project
にある/templates/docker-build.yml
はdocker-build
のジョブを追加します:
docker-build:
script: docker build -t my-image .
/templates/docker-test.yml
group/my-project
、 ジョブを追加しました:docker-test
docker-test:
script: docker run my-image /run/tests.sh