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.

Alibaba CloudでCI/CD pipelineを構築するbest practice(3)_CircleCIのテスト結果をSlackに通知

Last updated at Posted at 2022-12-07

前回の記事ではcircleciを利用してdocker imageをbuildし、alibaba cloudのACRにpushするまでやりました。
CIの結果は、CircleCIのダッシュボードから確認する必要があります。コミットの度に発火するCIの結果を、都度確認しに行くのはちょっと面倒です。
本記事では、CircleCIのテスト結果をSlackに通知する方法について解説します。

Slack Integrationsの設定手順

ちなみに以前からCircleCIを利用されている方は、このSlackアプリとWebhookを利用して連携を行っていたかもしれません。ですが現在では、この方法は推奨されておらず、本エントリーで紹介するOrbを使う必要があるようです。

以下にて手順を解説します。なお具体的な手順はドキュメントにも詳しく記載されていますので、こちらも参照してください。

CircleCIからSlackへ通知を送るための手順:

  1. Slackワークスペースにアプリをインストールし、OAuthトークンを発行する
  2. 発行されたトークンをCircleCIのコンテキストに登録する
  3. CircleCIのワークフロー内に通知処理を実装する

1. Slackワークスペースにアプリをインストールし、OAuthトークンを発行する

  • まずSlackのYour Appsを開き、Create an Appをクリックしてください。
    image.png

  • 今回はゼロからスクラッチするので、From scratchを選択します。
    image.png

  • アプリの名前と、インストールするワークスペースを決めます。ここでは名前をCircleCI-notificationにする
    image.png

  • アプリの設定画面に遷移しますので、左ペインからOAuth & Permissionsをクリックしてください。
    image.png

  • 画面を下へスクロールさせると、Scopesという項目の中にBot Token Scopesという項目があります。Add an OAuth Scopeをクリックして、アプリに必要な権限をつけましょう。CircleCIからの通知に必要な権限はchat:write、files:write、chat:write.publicの3つです。

image.png

  • 左ペインのInstall Appをクリックしてから、Install to Workspaceをクリックします。
    image.png

  • インストールの確認画面が表示されます。インストール先と権限を確認したら、許可するをクリックしてください。
    image.png

  • インストールが完了すると、OAuthトークンが表示されます。この文字列を控えておきましょう。
    image.png

  • slack channel作成(既存のチャンネルを使いたい場合はこのステップをスキップしてください。)
    image.png

  • slack channelに上記作られたアプリを追加(これは非常に大事です。やらないと通知がslack channelに送られない。)
    image.png

2. 発行されたトークンをCircleCIのコンテキストに登録する

続いてCircleCIのワークフロー内から、先ほど発行されたトークンを利用できるようにします。これにはコンテキストと呼ばれる仕組みを利用するのが一般的です。
コンテキストは組織内の各プロジェクトで、環境変数を安全に共有できる仕組みです。
コンテキストはSlackのトークンだけでなく、AWSのアクセスキーやk8sのクレデンシャルなど、様々な機密情報を安全に保管するために利用できます。
またコンテキストへのアクセスは、GitHubのOrganization内に設けたTeamsごとに制限することができます。デフォルトでコンテキストは全員が読み取ることが可能なため、他プロジェクトのメンバーに見えてはならない情報は、アクセス制限をかけることも検討してください。

  • CircleCIにログインし、Organization SettingsContextsを開いてCreate Contextをクリックします。
    image.png
  • コンテキストの名前を決めましょう。ここではslack_oauth_tokenとしました。Create Contextをクリックします。
    image.png
  • 先ほどのコンテキスト一覧画面に、作成したslack_oauth_tokenコンテキストが表示されますので、コンテキスト名をクリックしてください。
    image.png
  • 環境変数の登録画面に遷移します。Add Environment Variableをクリックします。
    image.png
  • SLACK_ACCESS_TOKENSLACK_DEFAULT_CHANNELという名前の環境変数を作成
    • SLACK_ACCESS_TOKEN : 先ほど発行されたトークンを入力
    • SLACK_DEFAULT_CHANNEL:デフォルトで通知を行うチャンネルIDを入力

    SLACK_DEFAULT_CHANNELは表示上のチャンネル名ではなく、チャンネルIDであることに注意してください。
    Slackのデスクトップアプリを利用しているなら、該当のチャンネル名を右クリックしてリンクをコピーし、得られるURLの末尾にある文字列がチャンネルIDです)

image.png

3. CircleCIのワークフロー内に通知処理を実装する

CircleCI Orbは, パッケージ化されたビルドコマンド/パイプラインです。
プログラミング言語に例えるなら、外部ライブラリをインポートして関数を使えるようにする機能に該当します。Orbを使えば様々なジョブやコマンドを再利用できます。
本来であれば何行にも渡って記述していた処理を, ほんの数行で管理することができます.
AWS連携やSlack連携など, 需要が高いジョブは幸いCircleCI公式経由でリリースされています。

また今回のSlack通知のような、一般的な機能は公式にOrb化され公開されているため、自分で実装する必要がありません。
ここではOrbを利用することで、Slackに通知を行うslack/notifyというコマンドを利用可能にしています。

  • 上記のOrbs Registryにアクセスし、slackを検索してください。
    image.png
  • 以下のページを参考にして、circleci上でconfig.ymlを編集

image.png

  1. slackのorbをtopレベルに追加
    orbs:
      slack: circleci/slack@4.12.0
    
  2. 以下を既存のstepに追加
    - slack/notify:
        event: pass
        template: basic_success_1
    
  3. context追加
    ワークフロー内では、Slackのトークンを読み込むため、コンテキストにアクセスする設定を行っています。context: コンテキスト名を指定しておけば、該当ジョブ内では環境変数にコンテキストの内容が自動的に読み込まれます。なおワークフロー内に複数のジョブがある場合、それぞれのジョブは独立したコンテナ内で実行されるため、コンテキストを利用する必要があるすべてのジョブそれぞれに、contextの記述を追加する必要がある点に気をつけてください。
    workflows:
      say-hello-workflow:
        jobs:
          - build-docker-image:
              context:
                - acr
                - slack_oauth_token
    

4. 通知確認

image.png

image.png
このように、ワークフローの結果がSlackに通知できるようになりました。

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?