tl;dr
CircleCI の Workflows で, 世界中で多分自分だけがハマった (他の人はきっとハマることは無いはず) のでメモっておきます.
そして, この記事は...
YAMAP エンジニア Advent Calendar 2019 の 7 日目の記事になる予定です.
そして, CircleCI Advent Calendar 2019 の 7 日目の記事になる予定です.
とある .circleci/config.yml
むかーし, むかーし
とある .circleci/config.yml (以後, config.yml) がありましたとさ.
version: 2.1 executors: default: docker: - image: docker:19.03.5-git jobs: test: executor: name: default steps: - run: name: Test command: | echo 'Test' build: executor: name: default steps: - run: name: Build command: | echo 'Build' deploy: executor: name: default steps: - run: name: Deploy command: | echo 'Deploy' workflows: version: 2 test-only: jobs: - test: filters: branches: ignore: - master - development build-after-deploy: jobs: - build - deploy: requires: - build filters: branches: only: - master - development
この config.yml の Workflows で実現したかったのは,
- master と development ブランチの場合には, build ジョブと deploy ジョブを実行したい
- また, build ジョブの後に deploy ジョブを実行する必要がある
- master と development ブランチ以外は test ジョブのみ実行したい
だったそうな.
ところが
master と development 以外のブランチでも build と deploy のジョブが動いちゃうことを確認したそうな.
あれ, deployment/demo02
ブランチなのに, test-only
と build-after-deploy
が動いちゃってる. なんでやねん.
しかも, build
しか動いていないという...
修正
冒頭の config.yml を以下のように修正したそうな.
... (略) ... workflows: version: 2 test-only: jobs: - test: filters: branches: ignore: - master - development build-after-deploy: jobs: - build: filters: branches: only: - master - development - deploy: requires: - build
test-only
ワークフローは, 以下のように ignore
キーに指定された master
と development
ブランチではジョブは発動しないようになっていますな. これは, 見りゃ判るよ案件. build-after-deploy
ワークフローが今回の肝で, deploy
ジョブは build
ジョブに依存しているので, requires
キーを指定しています. そして, 懸案となっていた master
と development
以外でも動いちゃうのは, build
ジョブにだけ filters
を設定すれば良かったんですな.
これで改めてジョブを実行してみると...
以下は deployment/demo02
ブランチ.
以下は master
ブランチにマージした場合の挙動.
意図した通りにジョブが動いていることを確認しましとさ.
めでたし, めでたし.