Edited at

CircleCIのManual ApprovalをSlackへ通知する

More than 1 year has passed since last update.


Manual Approvalとは

CircleCIのWorkflowで承認の手順を追加できるのがManual Approvalです。

https://circleci.com/docs/2.0/workflows/#holding-a-workflow-for-a-manual-approval

例えばデプロイの前に承認を行いたい、というようなユースケースが考えられるでしょうか。


通知が欲しい

通常のCircleCIとSlackの連携ではManual Approvalが発生しても特に通知などはしてくれません。

これでは承認が必要なのに気付かないなんてことも起きてしまいますので、承認が必要な状態だという通知がSlackに届いてほしいです。


Slackから承認画面へ飛べるようにする

正確にはManual Approval自体を通知するのではなく、Manual Approvalが依存するジョブの最後にSlackへの通知を追加することで解決しました。


追加したステップ

承認画面(Workflow画面)のURLは https://circleci.com/workflow-run/workflow_id となっており、WorkflowのIDが分かればアクセスできます。

WorkflowのIDは環境変数 CIRCLE_WORKFLOW_ID で取得できるので、リンクをSlackへポストします。

SlackのWebhook URLは予め取得して、プロジェクトのEnvironment Variablesで設定してあります。

承認権限のある担当者へ届くようにするといいでしょう。

- run:

name: send notification to slack
command: |
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\": \"Please approve workflow from <https://circleci.com/workflow-run/${CIRCLE_WORKFLOW_ID}|here>.\"}" \
$SLACK_WEBHOOK_URL

これで以下のようなメッセージがポストされます。

circleci.png

これでSlackから承認画面へ飛ぶことができるようになりました。

メッセージの内容やポストの方法はお好みでどうぞ。


まとめ

CircleCIのManual ApprovalをSlackへ通知することで少し気づきやすくなったと思います。

軽く調べた感じではいい方法がなかったので思いつきでやってみましたが、もっといい方法があれば是非教えてください。