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ごとにスケジュールをコントロールできるようになった