複数のワークフローを使ったパイプラインのスケジュール実行
はじめに
スケジュール化されたパイプラインはトリガーされたパイプラインであり、デフォルトではトリガーごとに設定されているすべてのワークフローが実行されます。 .circleci/config.yml
ファイル内のワークフローを条件によりフィルタリングすることができます。 設定した条件により、スケジュール化されたパイプラインがトリガーされる際に実行するワークフローを制御できます。 これらの条件は、定義済みパイプライン値またはカスタムのパイプラインパラメーターを使って設定することができます。 下記の各コード例では、.circleci/config.yml
ファイルで条件を設定する様々な方法を紹介します。
定義済みパイプライン値を使ったスケジュール実行
ワークフローのフィルタリングを実装するための 1 つの方法は、パイプライン値を使用することです。 以下のコード例では、定義済みパイプライン値である pipeline.trigger_source
と pipeline.schedule.name
を使用しています。 この例では、 pipeline.schedule.name
として daily_build
と nightly_build
が使用されていますが、パイプラインのスケジュール実行機能を使用する上では、pipeline.schedule.name
にはお好きな値を使用できます。
version: 2.1
...
daily-run-workflow:
# run workflow only when the daily_build pipeline is triggered
when:
and:
- equal: [ scheduled_pipeline, << pipeline.trigger_source >> ]
- equal: [ daily_build, << pipeline.schedule.name >> ]
jobs:
- test
- build
nightly-run-workflow:
# run workflow only when the nightly_build pipeline is triggered
when:
and:
- equal: [ scheduled_pipeline, << pipeline.trigger_source >> ]
- equal: [ nightly_build, << pipeline.schedule.name >> ]
jobs:
- build
- deploy
...
上記の例の when
の下の2番目の equal
は必ずしも必要ではありません。 pipeline.schedule.name
は、パイプラインがスケジュールによってトリガーされる場合に使用できるパイプライン値です。
スケジュールがトリガーされる時に 実行しない ワークフローのフィルタリングを追加することもできます。
version: 2.1
...
daily-run-workflow:
# run workflow only when the daily_build pipeline is triggered
when:
and:
- equal: [ scheduled_pipeline, << pipeline.trigger_source >> ]
- equal: [ daily_build, << pipeline.schedule.name >> ]
jobs:
- test
- build
nightly-run-workflow:
# do NOT run workflow if a scheduled pipeline is triggered
when:
not:
equal: [ scheduled_pipeline, << pipeline.trigger_source >> ]
jobs:
- build
- deploy
...
パイプライン値の全リストは、 パイプラインの値とパラメーター でご確認ください。
パイプラインパラメーターを使ったスケジュール実行
下記の例では、 run-schedule
というパラメーターが作成され、type: boolean
および default: false
と設定されています。 これにより、ワークフローのセクションで when
を使っていつパイプラインを実行するかの条件を指定できます。 when
条件を使用する場合は、以下の例のように when: not:
も設定する必要があります。
version: 2.1
...
# set pipeline parameters
parameters:
run-schedule:
type: boolean
default: false
workflows:
# do not run the scheduled pipeline if build-test-deploy
build-test-deploy:
when:
not: << pipeline.parameters.run-schedule >>
jobs:
- test
- build
# run the scheduled pipeline if nightly-snapshot
nightly-snapshot:
when: << pipeline.parameters.run-schedule >>
jobs:
- build
- deploy
...
この設定ファイルサンプルの全文は、GitHub 上の サンプルプロジェクト をご覧ください。 パイプラインパラメーターの全リストは、 パイプラインの値とパラメーター でご確認ください。
複数のスケジュールを含む複数のワークフローの設定
以下は、複数のパイプライン値を使った 3 つのワークフローのスケジュール実行のコード例です。 2 つのワークフローが同じスケジュール (daily_build
) で実行され、1 つは別のスケジュール (weekly_build
) で実行されます。
version: 2.1
...
workflows:
# run workflow only when the daily_build pipeline is triggered
daily-run-workflow:
when:
equal: [ daily_build, << pipeline.schedule.name >> ]
jobs:
- job-one
nightly-run-workflow:
# run workflow only when the daily_build pipeline is triggered
when:
equal: [ daily_build, << pipeline.schedule.name >> ]
jobs:
- job-two
weekly-run-workflow:
# run workflow only when the weekly_build pipeline is triggered
when:
equal: [ weekly_build, << pipeline.schedule.name >> ]
jobs:
- job-three
...