CircleCI Orbsで、jobの結果をslackに通知する

CircleCIでjobの結果を通知する:santa:

# TL;DR

- ```CircleCI Orbs```を使用して簡単にslackでjobの結果を通知する
- 成功、失敗をIFなどで条件分けする必要なし
- webhook取得

 
# 環境

```
CircleCI 2.1
orbs: slack: circleci/slack@3.4.2
```

- [Circleci Orbs]([CircleCI Orbsとは](https://circleci.com/docs/ja/2.0/orb-intro/))とは

Orbsとは簡単に言うと、CircleCIに用意されたパッケージを使用することです([公式 CircleCI Orbsとは](https://circleci.com/docs/ja/2.0/orb-intro/))
Orbsを使用すると記述量減るし、簡単にCI実装できます:santa:


# 流れ

1. webhook取得
2. circleciにwebhookを設定
3. ```.circleci/config.yml```を設定
4. 完了
5. 失敗時のみ通知

# 1. webhook取得

下記URLから結果を流したいslackチャンネルを選択してwebhookを取得

https://slack.com/services/new/incoming-webhook

こんなURLが取得できるはずですのでコピーしておきましょう
↓

```
https://hooks.slack.com/services/hoge/huga
```

# 2. CircleCIの環境変数にwebhookのurlを設定

![screenshot 2019-10-24 17.45.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183059/4cb0d154-062d-df32-aae3-b36f904d15bf.png)


CircleCIの設定画面(歯車⚙みたいなやつ)
↓

「Environment Variables」
↓
「Add Variable」をポチ🐶
↓
```SLACK_WEBHOOK```という変数名で追加
↓
![screenshot 2019-10-24 17.57.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183059/08c4ee48-d078-7136-0620-eee5c5495c2f.png)

実際の値はxxxxで表示されて登録完了しました:santa:

# 3. ```.circleci/config.yml```を設定

なにはともあれ最小限のコードから:santa:

```.circleci/config.yml
version: 2.1

orbs:
  slack: circleci/slack@3.3.0

jobs:
  deploy-and-notify:
    executor: container
    steps:
      - checkout
      - run: ./deploy.sh
      - slack/status:
          success_message: ':circleci-pass: $CIRCLE_BRANCH のデプロイが完了しました\n:github_octocat: User：$CIRCLE_USERNAME'
          failure_message: ':circleci-fail: $CIRCLE_BRANCH のデプロイが失敗しました\n:github_octocat: User：$CIRCLE_USERNAME'
          webhook: '${SLACK_WEBHOOK}'
```

## ポイント
- orbsを最初で宣言みたいする
- stepsが成功ステータス→slackに```success_message```が流れる
- stepsが失敗ステータス→slackに```failure_message```が流れる
- メッセージ内で```:circleci-pass:```や```:circleci-fail:```など絵文字が使える


# 4. 完了

↓成功時のメッセージはこんなかんじです（モザイク多くてごめんなさい）
![screenshot 2019-10-24 18.06.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183059/d6a1ff0c-588c-89d8-aecb-066d8c422703.png)

↓失敗時のメッセージはこんなかんじです（モザイク多くてのり弁みたいでごめんなさい）
![screenshot 2019-10-24 18.37.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183059/b0f7f465-cb12-0ecb-9659-041fc4b015d1.png)

# 失敗時のみ通知
通知うざいなーってなって、失敗時のみ通知させたいときは下記のようにパラメーター設定すればOKです

```.circleci/config.yml
orbs:
  slack: circleci/slack@3.4.2

  test:
    executor: container
    steps:
      - checkout
      - attach_workspace:
          at: .
      - run: npm test
      - slack/status:
          fail_only: true #これを設定する
          failure_message: ':circleci-fail: テスト失敗しました\n:github_octocat: User：$CIRCLE_USERNAME'
          webhook: '${SLACK_WEBHOOK}'
```


# あとがき

[circleciでデフォルトで使用できる環境変数](https://circleci.com/docs/ja/2.0/env-vars/#%E5%AE%9A%E7%BE%A9%E6%B8%88%E3%81%BF%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0)もslackのメッセージに組み込めるので

- どのブランチ（CIRCLE_BRANCH）か、
- 誰がプッシュしたのか（CIRCLE_USERNAME）なども使えて便利ですねー:santa:


Orbsで用意されているパッケージを使用すると、CircleCIでの記述量が減るのでOrbsで用意されているものは積極的に使用していきたいと思いました:santa:

使える[Orbs 一覧](https://circleci.com/orbs/registry/)はこちら

次はECR、ECSのデプロイをOrbs使って実装した記事は[こちら](https://qiita.com/k_bobchin/items/83f3c39e9d666a5c1c95)です:santa:


# 参考

[CircleCI Orbsとは](https://circleci.com/docs/ja/2.0/orb-intro/)