個人のCircleCI Orbs Slackをバージョン4に上げるか。結構大変なんだよな…
— adachin👾SRE (@adachin0817) November 3, 2022
2年前のクリスマス(2年前!?)に個人で利用しているCircleCIのSlack通知をOrbs v3に移行しましたが、今回v4にバージョンアップしてみました。v4から破壊的変更があったので、もろもろご紹介できればと思います。
circleci/slack@4.10.1
https://circleci.com/developer/ja/orbs/orb/circleci/slack
https://github.com/CircleCI-Public/slack-orb/wiki
- Custom Message Template
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
- slack/notify: channel: 'ABCXYZ, ZXCVBN' custom: | { "blocks": [ { "type": "section", "fields": [ { "type": "plain_text", "text": "*This is a text notification*", "emoji": true } ] } ] } event: always |
v3まではmessageでラフにtextを指定すれば独自の通知ができていましたが、廃止されて新たにCustom Message Templateが加わりました。カスタマイズする際にSlack Block Kit Builderを利用してJSONを書かなければならないので、結構手間がかかります。今回は個人ということもあって面倒くさいので、Customは利用せずにTemplatesを使って修正してみました。さらにSlackのWebhookも廃止されて、Slack App/APIに変更されました。まずはSlack APIから作っていきましょう。
Setup Slack API
https://github.com/CircleCI-Public/slack-orb/wiki/Setup
- https://api.slack.com/appsにアクセス
Create New App
を選択
- OAuth & Permissionsのscopesを設定
Method | Reason |
---|---|
chat:write | Post to Slack (bot must be invited to channel) |
chat:write.public | Post to any channel |
files:write | File uploading (Not yet used, check for updates) |
- OAuth Tokens for Your WorkspaceでAccess Tokenを作成
- CircleCIの環境変数にSLACK_ACCESS_TOKENで上記のAccess Tokenを登録
Fix CircleCI config.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
version: 2.1 orbs: git-shallow-clone: guitarrapc/git-shallow-clone@2.4.0 terraform: circleci/terraform@3.1.0 slack: circleci/slack@4.10.1 ~省略~ commands: ~省略~ slack-notify-fail: description: "Slack notify fail" steps: - slack/notify: channel: ci_cd event: fail template: basic_fail_1 slack-notify-success: description: "Slack notify success" steps: - slack/notify: channel: ci_cd event: pass template: basic_success_1 jobs: check_no_difference: <<: *default_config steps: - apk-pkg-install - run: echo "No terraform difference ok !!" - slack-notify-fail - slack-notify-success ## Terraform CI prd_terraform_fmt_validate_tflint: executor: name: terraform/default tag: 1.3.0 resource_class: small working_directory: ~/project steps: - apk-pkg-install - install-tflint - git-shallow-clone/checkout: depth: 1 fetch_depth: 1 - *terraform_init - terraform/fmt: path: terraform/env/prd/ - terraform/validate: path: terraform/env/prd/ - slack-notify-fail - slack-notify-success - run: name: tflint command : cd terraform/env/prd/ && tflint - slack-notify-fail - slack-notify-success # prd plan prd_terraform_plan: executor: name: terraform/default tag: 1.3.0 resource_class: small working_directory: ~/project steps: - apk-pkg-install - git-shallow-clone/checkout: depth: 1 fetch_depth: 1 - *terraform_init - terraform/plan: path: terraform/env/prd/ - slack-notify-fail - slack-notify-success # prd apply prd_terraform_apply: executor: name: terraform/default tag: 1.3.0 resource_class: small working_directory: ~/project steps: - apk-pkg-install - git-shallow-clone/checkout: depth: 1 fetch_depth: 1 - *terraform_init - terraform/apply: path: terraform/env/prd/ - slack-notify-fail - slack-notify-success ~省略~ |
- Templates
[DigitalOcean][Terraform][CircleCI]TFLintを導入してみたらWarningだらけになったお話
直近Terraform CI/CD環境はTFLintを導入とOrbsに移行しました。以前の書き方は上記のブログを参考にしてみてください。以前はJobsごとにslack-notifyを指定していましたが、リファクタリングしてcommandsで slack-notify-fail
と slack-notify-success
を追加しました。Jobsにはcommandsで定義した名称を指定するだけなので、コードが短くなりました。テスト通知してみましょう。
- テスト通知
ん〜Templatesだと見にくいというかv3と比べるとデカイ..やはりcustomに移行したほうが良さそう…
- v3
まとめ
Slack App/APIに統一されたことで、毎回通知のためにWebhookを作成することがなくなったのはかなりメリットですね。1つAPI作っておければあとは環境変数追加するだけで、使い回しができるのは楽!customは気が向いたら変更します…
0件のコメント