Edited at

CircleCI2.0のapprovalジョブは実行されない

More than 1 year has passed since last update.


Approval

CircleCI 2.0から追加された、workflowにおけるjobのApprovalトリガーについてです。

githubのPRのapproveのように、人が承認して初めて実行されるjobにつけるフラグです。


以下公式より引用

Holding a Workflow for a Manual Approval


.circleci/config.yml

workflows:

version: 2
build-test-and-approval-deploy:
jobs:
- search
- request-testing:
type: approval # approvalを設定したjob
- build:
requires:
- request-testing
- build-mab-:
requires:
- request-testing
- test:
requires:
- build-mab-
- build-mab-aws:
requires:
- request-testing
- test-aws:
requires:
- build-mab-aws

このようなyamlをかくと



このように、request-testingjobに依存した一連のjobが止まり、誰かがこの画面から承認しないと実行されません。

重いor危険なタスクをコミットごとに実行したくないケースや、自動化したいけど人が任意のタイミングで実行したいjobを登録するのに便利だなと思いました。


approvalジョブは実行されない

ただこの時に、approvalなジョブ、上の例だとrequest-testingジョブが実行されませんでした。

同じように疑問に持っている人がフォーラムで質問して、自己解決していました。

本当に単純なことですが、approvalなジョブはジョブとは言いつつ、定義すらいらないものでした。

上のサンプルを全て書くと以下のようになります。(若干簡略化してます)


.circleci/config.yml

defaults: &defaults

working_directory: /tmp
docker:
- image: buildpack-deps:jessie

version: 2
jobs:
search:
<<: *defaults
steps:
- checkout
- run: echo "search"
# approvalなjobは中身の定義不要。定義しても実行されない。
#request-testing:
# <<: *defaults
# steps:
# - checkout
# - run: echo "request-testing"
build:
<<: *defaults
steps:
- checkout
- run: echo "build"
test:
<<: *defaults
steps:
- checkout
- run: echo "test"

workflows:
version: 2
build-test-and-approval-deploy:
jobs:
- search
- request-testing:
type: approval # approvalを設定したjob
- build:
requires:
- request-testing
- test:
requires:
- build


つまりjobsの中には入れますが、ユーザが自由に記述できるようなジョブではない、と思った方が良さそうです。

こういう時にはファイル全体のサンプルが欲しいですね。

一応、公式サンプルにもissueが上がってましたが、メンテされてなさそう。


おまけ:githubでの見た目も微妙?

Githubのcommit一覧やPR一覧でCIステータスアイコンが表示されると思います。

その表示が、Approvalなjobを含んでいるとちょっと微妙な感じになります。



上の例だと上から三つめからapprovalなjobを追加したんですが、holdされたjobが残っていると黄色いアイコンになってしまいます。

PR内だとjobごとのステータスが確認できるので、問題ないとはいえ、ちょっと見た目が良くないですよね。。

statusバッジは未確認です。


参考