GitLab CI である Job で変数を定義して、それを後続の Job でも使いたいなと思って調べていたら artifacts:reports:dotenv にたどり着いたのでメモ。
以下、使用例
stages:
- stage1
- stage2
- stage3
- stage4
job1:
stage: stage1
script:
- echo "MY_VAR1=first-variable" >> dot.env
artifacts:
expire_in: 30 mins
reports:
dotenv: dot.env
# job1 と job2 で使用するファイル名が重複しても別物なので問題ない
job2:
stage: stage2
script:
- echo "MY_VAR1=$MY_VAR1"
- echo "MY_VAR2=second-variable" >> dot.env
artifacts:
expire_in: 30 mins
reports:
dotenv: dot.env
needs:
- job: job1
artifacts: true
# needs で指定しているので MY_VAR1 も MY_VAR2 も渡される
job3_1:
stage: stage3
script:
- echo "MY_VAR1=$MY_VAR1"
- echo "MY_VAR2=$MY_VAR2"
needs:
- job: job1
artifacts: true
- job: job2
artifacts: true
# needs で job1 だけを指定しているので MY_VAR1 だけ渡される
job3_2:
stage: stage3
script:
- echo "MY_VAR1=$MY_VAR1"
- echo "MY_VAR2=$MY_VAR2"
needs:
- job: job1
artifacts: true
# needs を指定しないと MY_VAR1 も MY_VAR2 も両方渡される
job3_3:
stage: stage3
script:
- echo "MY_VAR1=$MY_VAR1"
- echo "MY_VAR2=$MY_VAR2"
# needs で job1 が指定されているが artifacts は false なので
# MY_VAR1 も MY_VAR2 も渡されない
job3_4:
stage: stage3
script:
- echo "MY_VAR1=$MY_VAR1"
- echo "MY_VAR2=$MY_VAR2"
needs:
- job: job1
artifacts: false
# MY_VAR2 だけ受け取れる
job3_5:
stage: stage3
script:
- echo "MY_VAR1=$MY_VAR1"
- echo "MY_VAR2=$MY_VAR2"
needs:
- job: job1
artifacts: false
- job: job2
artifacts: true
https://gitlab.com/gitlab-org/gitlab/-/issues/22638
ずっと対応されないままかと思ってたけどもう対応されてたんですねえ