無料でビルドを開始
CircleCI.comアカデミーブログコミュニティサポート

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

1+ year ago1 min read
クラウド
Server v4.x
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
...

Suggest an edit to this page

Make a contribution
Learn how to contribute