複数のワークフローを使ったパイプラインのスケジュール実行

1+ year ago1 min read
Last updated • Read time
クラウド
This document is applicable to CircleCI クラウド
Server v4.x
This document is applicable to CircleCI Server v4.x
Server v3.x
This document is applicable to CircleCI Server v3.x

はじめに

スケジュール化されたパイプラインはトリガーされたパイプラインであり、デフォルトではトリガーごとに設定されているすべてのワークフローが実行されます。 .circleci/config.yml ファイル内のワークフローを条件によりフィルタリングすることができます。 設定した条件により、スケジュール化されたパイプラインがトリガーされる際に実行するワークフローを制御できます。 これらの条件は、定義済みパイプライン値またはカスタムのパイプラインパラメーターを使って設定することができます。 下記の各コード例では、.circleci/config.yml ファイルで条件を設定する様々な方法を紹介します。

定義済みパイプライン値を使ったスケジュール実行

ワークフローのフィルタリングを実装するための 1 つの方法は、パイプライン値を使用することです。 以下のコード例では、定義済みパイプライン値である pipeline.trigger_sourcepipeline.schedule.name を使用しています。 この例では、 pipeline.schedule.name として daily_buildnightly_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
...