Approval
CircleCI 2.0から追加された、workflowにおけるjobのApprovalトリガーについてです。
githubのPRのapproveのように、人が承認して初めて実行されるjobにつけるフラグです。
以下公式より引用
Holding a Workflow for a Manual Approval
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-testing
jobに依存した一連のjobが止まり、誰かがこの画面から承認しないと実行されません。
重いor危険なタスクをコミットごとに実行したくないケースや、自動化したいけど人が任意のタイミングで実行したいjobを登録するのに便利だなと思いました。
approvalジョブは実行されない
ただこの時に、approvalなジョブ、上の例だとrequest-testing
ジョブが実行されませんでした。
同じように疑問に持っている人がフォーラムで質問して、自己解決していました。
本当に単純なことですが、approvalなジョブはジョブとは言いつつ、定義すらいらないものでした。
上のサンプルを全て書くと以下のようになります。(若干簡略化してます)
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バッジは未確認です。