GitLab のジョブのルールを書いていて、「あれ、このルールどう書くっけ・・・」となるので備忘録
ワークフローのルール
workflowは、パイプラインそのものを実行するかどうかを決定するルールです。
workflowのrulesはパイプラインの多重実行を防ぐためこのようなルールにしています。
マージリクエストイベントやスケジュールされたパイプラインのみが実行されるようにすることで、不必要な実行を防ぎます。
workflow:
rules:
# スケジュールパイプラインの時は常に実行
- if: $CI_PIPELINE_SOURCE == 'schedule'
when: always
# マージリクエストイベントが発生した場合にパイプラインを実行する
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
when: always
# pushイベントでマージリクエストが存在する場合はパイプラインを実行しない
- if: $CI_PIPELINE_SOURCE == 'push' && $CI_OPEN_MERGE_REQUESTS
when: never
# 上記に一致しないブランチへのpushではパイプラインを実行する
- if: $CI_COMMIT_BRANCH
when: always
# どの条件にも合致しない場合はパイプラインを実行しない
- when: never
スケジュール実行のルール
スケジュールなら常に実行
rules:
- if: $CI_PIPELINE_SOURCE == 'schedule'
when: always
スケジュールなら常に実行しない
rules:
- if: $CI_PIPELINE_SOURCE == 'schedule'
when: never
実行日時のルール
たとえば 9時〜18時(業務時間内)は実行しないとか
rules:
- if: $CI_PIPELINE_SOURCE != "schedule" && $CI_PIPELINE_CREATED_AT =~ /T(09|1[0-8]):/
when: never
デプロイ環境に影響を与えるような処理で使ったりします。
スケジュールの場合に許可しているのは、どうしても実行したい場合に実行できるようにするためこうしています。
コミットメッセージのルール
強制的にCIを実行させたりしたい時用
空コミットで、コミットメッセージに [force ci]
と入れてコミット&pushすることで実行させることができます
rules:
- if: $CI_COMMIT_MESSAGE =~ /\[force ci\]/
when: always
git commit --allow-empty -m "[force ci]"
でコミットしてpushすれば実行できます。
※ゴミとして残るので rebase
で drop しましょう。
ほかにも忘れがちなrulesあれば今後追記していきます。