メーリークリスマス!
まずはこれを見てほしい!
以下、Orbsを使わず旧UIでSlack連携をしてしまうと上記のように見にくいし、エラーが出たときはメンションを飛ばすなどできません。Orbsを使えば様々なカスタマイズが可能になります。というわけで今回個人で運用しているDigitalOcean x Terraform CIを修正してみました。Terraform CIに関しては以下参考にできればと思います。
そもそも旧UIから以下の設定ってどこでやるのだろうか…むしろ辿り着けない!?
https://circleci.com/docs/ja/2.0/notifications/
■circleci/slack@3.4.2
https://circleci.com/developer/ja/orbs/orb/circleci/slack?version=3.4.2
最新はv4.1.4になりますが、4系だとカスタムが増えてより細かく通知できるのですが、そこまで工数かけたくないため、v3.4.2でシンプルに作ってみました。今回は notify
、 status
を使えばOKですね。
■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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
version: 2.1 orbs: slack: circleci/slack@3.4.2 references: default_config: &default_config docker: - image: hashicorp/terraform:light working_directory: ~/project environment: TERRAFORM_ENV: ~/project/ repo_cache_key: &repo_cache_key v1-repo-{{ .Branch }}-{{ .Revision }} restore_repo: &restore_repo restore_cache: key: *repo_cache_key save_repo: &save_repo save_cache: key: *repo_cache_key paths: - ~/project set_terraform_environment: &set_terraform_environment run: name: set terraform environment command: | export DIGITALOCEAN_TOKEN="${DIGITALOCEAN_TOKEN}" cd ~/project/ terraform_init: &terraform_init run: name: terraform init command: | cd ~/project/terraform/env/prd terraform init -backend-config="token=${TF_API_TOKEN}" jobs: terraform_fmt_validate: <<: *default_config steps: - checkout - *set_terraform_environment - run: name: terraform fmt validate command: | apk add bash curl jq cd ~/project/terraform/env/prd terraform init -backend-config="token=${TF_API_TOKEN}" terraform fmt terraform validate - *save_repo - slack/status: fail_only: true mentions: 'here' failure_message: 'Error terraform validate 🚨 \n :innocent: ${CIRCLE_USERNAME} :branch: ${CIRCLE_BRANCH}' webhook: ${SLACK_WEBHOOK} - slack/notify: title: 👍 color: '#42f486' message: 'terraform validate OK ✨ \n :grin: ${CIRCLE_USERNAME} :branch: ${CIRCLE_BRANCH}' webhook: ${SLACK_WEBHOOK} terraform_plan: <<: *default_config steps: - *restore_repo - *set_terraform_environment - *terraform_init - run: name: terraform plan command: | apk add bash curl jq cd ~/project/terraform/env/prd terraform plan - slack/status: fail_only: true mentions: 'here' failure_message: 'Error terraform plan 🚨 \n :innocent: ${CIRCLE_USERNAME} :branch: ${CIRCLE_BRANCH}' webhook: ${SLACK_WEBHOOK} - slack/notify: title: 👍 color: '#42f486' message: 'terraform plan OK ✨ \n :grin: ${CIRCLE_USERNAME} :branch: ${CIRCLE_BRANCH}' webhook: ${SLACK_WEBHOOK} terraform_apply: <<: *default_config steps: - *restore_repo - *set_terraform_environment - *terraform_init - run: name: terraform apply command: | apk add bash curl jq cd ~/project/terraform/env/prd terraform apply -auto-approve - slack/status: fail_only: true mentions: 'here' failure_message: 'Error terraform apply 🚨 \n :innocent: ${CIRCLE_USERNAME} :branch: ${CIRCLE_BRANCH}' webhook: ${SLACK_WEBHOOK} - slack/notify: title: 👍 color: '#42f486' message: 'terraform apply OK ✨ \n :grin: ${CIRCLE_USERNAME} :branch: ${CIRCLE_BRANCH}' webhook: ${SLACK_WEBHOOK} workflows: version: 2.1 deploy: jobs: - terraform_fmt_validate - terraform_plan: requires: - terraform_fmt_validate - terraform_apply: filters: branches: only: master requires: - terraform_plan |
まずはversion 2.1必須になります。 3行目
でslackのバージョンを指定しましょう。あとはJobs配下に指定するだけなので、 terraform validate
から通知させてみます。TerraformのイメージはAlpine Linuxを使っていることから 47行目
にbash、curl、jqをインストールしないと最後のSlack Notificationで通知できません。messageにはCircleCIの既存で設定されているユーザ名、ブランチ名の環境変数を指定することで出力可能になります。
56行目
では slack/statusのfail_only
によってエラーが起きたらメンション付きで@hereにしました。slackのユーザ名は個人情報なのでGitHubでは管理したくないので…といっても自分は既にバレてるな。
最後に 58行目
の slack/notify
で成功したらSlack通知させるようにしました。これで通知したいチャンネルをミュートしても誰でも気づくはずだと思います。webhookは事前に環境変数を登録しましょう。ではpushとマージしてみましょう!
■Slack
- Other project
他のプロジェクトにも設定してみましたが、エラーを出すとちゃんとメンション来ているのでOK!
■まとめ
Orbsめちゃくちゃ見やすくなったので良き!イカしてるぜ!これでエラー出たときのみCircleCIのコンソール画面で確認してデバッグするだけとなりました。あとでv4でも作ってみよう!またブログします!
0件のコメント