GitLab-CIで複数のJobをスケジューリングして実行したい場合のメモ
単純にスケジュールで実行させるには次のような設定になる
- .gitlab-ci.yml
job1: stage: test script: echo 'hello! job1' only: - schedules job2: stage: test script: echo 'hello! job2' only: - schedules
Web UIからスケジュールを登録するとそのスケジュールに対してjob1
,job2
が実行される
job1は毎日実行でjob2は週ごと実行したい場合、CI/CD
-> Schedule
からスケジュールを2つ作成する必要があるが上記設定だと日ごとと週ごとと両方job1,job2が実行されてしまう
公式のドキュメントを読んでもonly.schedules
を指定するとしか載っていなかったのでもう少し調べてみた
stackoverflowでは次のスレッドを発見した
post - How to trigger a specific job in gitlab - Stack Overflow
triggers
でAPI経由での実行時に実行対象Jobをコントロールしたいという内容だった
- curlのパラメータ
--form "variables[TRIGERRED_JOB]=job1"
- formの内容の参照
$variables[TRIGERRED_JOB]
それをonly.variables
で条件指定してあげれば良さそう
抜粋して記述すると次のようになる
job1: only: variables: - $variables[TRIGERRED_JOB] == "job1"
環境変数の内容をチェックして条件に合致するパターンのみjobを発行できるよう
もう少し調べると次のissueで解決策が提示されていた
Choose jobs in scheduled pipelines (#42313) · Issues · GitLab.org / GitLab FOSS · GitLab
環境変数の値をonly
の条件に含めてスケジュールごとに実行するJobを制御することで異なるスケジュールごとにJobを実行することが可能になる
スケジュール追加画面のVariables
項目で環境変数を設定できるので設定をする
- daily
- weekly
最終的には次のような設定になった
- .gitlab-ci.yml
stages: - test daily_job: stage: test script: echo 'hello! daily job' only: variables: - $JOB_TYPE == "daily" weekly_job: stage: test script: echo 'hello! weekly job' only: variables: - $JOB_TYPE == "weekly"
- 毎日
daily_job
が実行される - 毎週
weekly_job
が実行される
これでJobごとにスケジュールをコントロールできるようになった