CircleCI
の2.0
で導入されたWorkflows
を使うことで、複数のジョブを実行できる。
ちなみにCircleCI
のCLIツールでは、Workflows
は使えない模様。
バージョン0.1.5607+f705856
のCLIツールを使ってローカルで実行しようとしたところ、ダメだった。
Workflows
を使うには、.circleci/config.yml
にworkflows
セクションを追加し、CircleCI
のバージョンのあとにworkflow
の名前を書いていく。
そのwordflow
で実行するジョブをjobs
に書いていく。
以下のbuild_and_test
は、my_build
とmy_test
を実行する。
version: 2 jobs: my_build: docker: - image: circleci/node:10.9.0 steps: - run: echo "ビルドしたよ" my_test: docker: - image: circleci/node:10.9.0 steps: - run: echo "テストしたよ" workflows: version: 2 build_and_test: jobs: - my_build - my_test
上記の記述だと、my_build
とmy_test
をパラレルに実行する。
これを、シーケンシャルに実行する形に書き換える。今回はmy_build
の次にmy_test
を実行することにする。
ジョブにrequires
を指定すると、指定されたジョブが処理されるまで実行を待つ。
以下の例だと、my_build
の処理が完了するまで、my_test
は実行されない。
version: 2 jobs: my_build: docker: - image: circleci/node:10.9.0 steps: - run: echo "ビルドしたよ" my_test: docker: - image: circleci/node:10.9.0 steps: - run: echo "テストしたよ" workflows: version: 2 build_and_test: jobs: - my_build - my_test: requires: - my_build
my_build
をわざと失敗させて、確認してみる。
& exit 1
をつけて、my_build
が失敗するようにした。
version: 2 jobs: my_build: docker: - image: circleci/node:10.9.0 steps: - run: echo "ビルドしたよ" & exit 1 my_test: docker: - image: circleci/node:10.9.0 steps: - run: echo "テストしたよ" workflows: version: 2 build_and_test: jobs: - my_build - my_test: requires: - my_build
意図通り、my_test
は実行されなかった。
そして、requires
の指定を外してパラレルに戻すと、my_test
はmy_build
の実行や失敗には影響されずに処理された。
最後に、ブランチによって処理を変える方法について記述する。
filters:branches:only:ブランチ名
で、そのブランチでのみ、そのジョブを実行する。
以下は、development
ブランチでのみ、my_build
を処理したあとにmy_test
を実行する場合の記述。
version: 2 jobs: my_build: docker: - image: circleci/node:10.9.0 steps: - run: echo "ビルドしたよ" my_test: docker: - image: circleci/node:10.9.0 steps: - run: echo "テストしたよ" workflows: version: 2 build_and_test: jobs: - my_build - my_test: filters: branches: only: development requires: - my_build