1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

circleciをさっくり導入してslackに通知を投げる

Last updated at Posted at 2023-10-21

TL;DR

  • circleCIとslackの連携はOrbを利用する
    • slack側ではオリジナルのアプリを作成する要領で構築する
  • Pythonの単体テストの成功失敗有無の通知を行うconfigを記述した
    • slackへのメッセージはBlock Kit Builderが使える
    • 今回は面倒なのでtemplateをそのまま利用した

背景

  • CI/CDツールを利用した経験が無いので何かしら導入してみたい。
  • Jenkinsを導入するか悩んだが、そのうち触る機会がありそうなので今回はcircleCIを採用。
  • githubと同じでslackにアプリがあるから紐づけるだけでいいだろうと思っていたが、どうやら主流なやり方では無いよう。

手順

基本的に公式に従う。
circleciサイト
ぼさっとしてるとハマったのでそこだけmemo。

circleCI側Contextに設定する値でミス

config.ymlは公式のものをまずは採用。

circleCIのContextに

SLACK_ACCESS_TOKEN
SLACK_DEFAULT_CHANNEL

を環境変数として設定する必要がある。
SLACK_ACCESS_TOKENはSlack側で生成したものをそのまま張り付ければよい。

SLACK_DEFAULT_CHANNELはslackのチャンネルのリンクの値を張ればよい
スクリーンショット 2023-10-18 010101.jpg
ここで取得したリンクをそのまま宛てるのではなく、このリンク中

https://example.slack.com/archives/C12ABCDE123 #<=C12ABCDE123の部分

C12ABCDE123の部分をSLACK_DEFAULT_CHANNELの値として設定する。
ここで間違うとinvalid_authとなる。
image.png
成功するとリクエストに成功した旨がcircleCI側からも確認できる。

単体テストを自動で行う

自分以外の人も今回プロジェクトに関わっているためレビューを簡素化したり、バグを手早く発見したりしたいので今回は自動テスト化を目指す。

作りたいもの

  • masterにマージされたら、単体テストを実行。
    • 成功したらコメントをチャンネルに流す
    • 失敗した場合もチャンネルに流す

今回はpytestによるテストがpassしたか否かの通知を行ってもらう。

完成形

version: 2.1
orbs:
  slack: circleci/slack@4.12.5
jobs:
  build:
    shell: /bin/bash
    docker:
      - image: "cimg/python:3.12.0"
    steps:
      - checkout # ~/project dir
      - run:
          name: install pytest
          command: |
            python -m venv venv
            source venv/bin/activate
            pip install -r requirements.txt
      - run:
          name: run unittest
          command: |
            source venv/bin/activate
            cd backend
            python -m pytest
      - slack/notify:
          template: basic_fail_1
          event: fail
      - slack/notify:
          template: basic_success_1
          event: pass
workflows:
  unit_test:
    jobs:
      - build:
          context: slack-secrets

補足

失敗成功による通知はslackのorbが用意してくれたものを利用する
この辺を読むとわかる。
https://circleci.com/developer/ja/orbs/orb/circleci/slack#usage-notify_on_fail_with_template

slackで送信するメッセージについて

今回は以下の通りに設定した。

event: fail
template: basic_fail_1

templateではなく、customを用いれば自由に設定できる。
今回は簡便なもので構わないため、templateを利用した。

ローカルcircleciで動作確認を実施

WSLを利用しているが、Dockerが利用できる環境であれば検証可能
https://circleci.com/docs/ja/local-cli/#alternative-installation-method
こちらを参照するとよい。

適当にローカルcircleciのコマンドを打つと一番初めは
「情報収集していいか?」と質問されるのでお好みで回答。

ローカルcircleCIで確認。

circleci local execute build #バージョンによってoptionの付け方が違うので公式サイト参照を推奨

dockerのimageをダウンロードするので、ネット帯域が細いとダウンロード時間が長すぎるために途中でコケるので注意。

無事に成功してればOK

pushしてテストが走るか確認

スクリーンショット 2023-10-21 134108.jpg

OK

今後の課題

  • インフラを含めたデプロイ自動化
  • フロントのデプロイ自動化
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?