2021年4月29日木曜日

Gitlab CI で YAML ファイルを include したりテンプレート化したりする方法

Gitlab CI で YAML ファイルを include したりテンプレート化したりする方法

概要

.gitlab-ci.yml が複雑になると YAML ファイルの内容が冗長化することがあります
そんな場合は include や anchor 機能を使えば YAML ファイルの管理が楽になったりします

環境

  • Gitlab 13.9.5-ee

include を使う

include を使うとジョブの定義を別の YAML に定義しそれを使用することができるようになります

  • mkdir .gitlab-ci
  • vim .gitlab-ci.yml
stages:
  - stage1
  - stage2

include:
  - local: /.gitlab-ci/echo1.yml
  - local: /.gitlab-ci/echo2.yml
  • vim .gitlab-ci/echo1.yml
echo1:
  image:
    name: alpine:latest
  stage: stage1
  script:
    - "export MSG=hello"
    - "echo ${MSG}"
    - echo "MSG=HELLO" >> build.env
  artifacts:
    reports:
      dotenv: build.env
  • vim .gitlab-ci/echo2.yml
echo2:
  image:
    name: alpine:latest
  stage: stage2
  script:
    - "echo ${MSG}"
  dependencies:
    - echo1

dotenv を使ってジョブ間で値を渡すこともできます

テンプレート化する

テンプレート化した YAML の内容は継承っぽいことができるようになります
こちらはファイル (ジョブ) を分けるというより script を分ける場合などに使います

  • vim .gitlab-ci.yml
stages:
  - stage1
  - stage2

.echo1_script: &echo1_script
  - "export MSG=hello"
  - "echo ${MSG}"
  - "export MSG=HELLO"

.echo2_script: &echo2_script
  - "echo ${MSG}"

echo:
  image:
    name: alpine:latest
  stage: stage1
  script:
    - *echo1_script
    - *echo2_script

継承させたい script の内容はドットから始まるようにします
また anchor で名前を付与する必要があり名前はアンパサンドで参照名を付与します
参照する場合はアスタリスクでテンプレートを参照できます

参考サイト

0 件のコメント:

コメントを投稿