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_USERPOSTGRES_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_dependenciesdeploy.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.ymldocker-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