Slack の GitHub インテグレーションで GitHub Actions ワークフローのイベントを通知可能に
Slack の GitHub インテグレーションを使えば、PR(Pull Request) や issue のオープンや更新などのイベントを通知できます。PR に Slack からコメントすることも可能です。
先日、GitHub Actions ワークフローのイベントも通知できるようになったことが Changelog に流れていました。
GitHub Actions workflow notifications in Slack and Microsoft Teams | GitHub Changelog
これまではワークフローにサードパーティの Action を組み込んで実現していた部分ですので、気になる方も多いのではないでしょうか。
この記事では GitHub インテグレーションの導入、ワークフローイベント通知の登録と実際の使用感を見ていきます。
Changelog には Microsoft Teams でも同様にワークフローイベントの通知が受けられるようになったことがアナウンスされています。この記事では Slack 通知について記述します。
GitHub リポジトリからの通知の種類
#GitHub + Slack Integration の README に通知の種類や設定方法の詳細があります。
slack/README.md at main · integrations/slack
GitHub インテグレーションでは以下のイベント通知がデフォルトで有効になっています。
issues
: issue のオープンとクローズpulls
: PR の作成・マージ、ドラフト PR が "Ready for Preview" になった時commits
: デフォルトブランチ(通常は main) への新規コミットreleases
: リリースの公開deployments
: (GitHub Actions による) デプロイ状態の更新
以下のイベント通知はデフォルトで無効になっています。なので今回の新機能であるワークフローイベント通知はデフォルトでは無効化されています。
workflows
: GitHub Actions ワークフローの実行通知(今回の新機能)reviews
: PR レビューcomments
: PR と issue への新規コメントbranches
: ブランチの作成と削除commits:*
: 全てのブランチに push された全てのコミット+label:"your label"
: issue、PR、コミット に付与されたラベルによるフィルターdiscussions
: ディスカッションの作成と回答
GitHub インテグレーションの導入
#Slack 画面の左下 アプリを追加する
から開始します。
アプリ検索で GitHub を探して Slackに追加
をクリックします。
Slack ワークスペースへのアクセスを許可します。
Slack 上で GitHub との DM が開きますので、Connect GitHub account
をクリックします。
接続画面の Connect GitHub account
をクリックします。
表示される Verification Code をクリップボードにコピーします。
Slack の画面に戻って Enter code
をクリックします。
クリップボードにコピーしたコードを貼り付けて 送信
をクリックします。
成功すると GitHub のメッセージがコマンドの使い方などのサンプルとともに表示されます。
Slack チャネルを GitHub リポジトリにサブスクライブする
#ここからは Slack のスラッシュコマンドを使用して設定を行います。
通知を受けたいチャネルに GitHub アプリを招待します。
/github subscribe <owner>/<repo>
で通知を受けたいリポジトリにチャンネルをサブスクライブします。
うまくいけば、デフォルトの issues
、pulls
、releases
、deployments
の通知がが有効になった旨のメッセージが表示されます。もちろん、イベントを個別に subscribe、unsubscribe できます。
リポジトリのワークフローイベントにサブスクライブする
#では、GitHub Actions ワークフローのイベントにもサブスクライブしましょう。以下のようにすると、対象のリポジトリのワークフロートリガーイベントが通知されます。デフォルトで通知されるイベントは、pull_request
です。
/github subscribe owner/repo workflows
通知をフィルターしたい場合、以下のようにフィルター条件を JSON 形式で指定します。
/github subscribe owner/repo workflows:{name:"your workflow name" event:"workflow event" branch:"branch name" actor:"actor name"}
name
: ワークフロー名event
: ワークフローが起動される全てのイベント[1]actor
: ワークフローを起動、またはワークフローの実行責任を持つ人branch
: ワークフローが実行されるブランチ。PR イベントの時は PR のターゲットブランチ(デフォルトは main)が対象になる。
通常は PR 作成がトリガーになるため、フィルターはワークフロー名の指定だけで十分でしょう。README には書かれていませんでしたが、ワークフローを複数指定したい場合は、カンマ区切りで可能です。
/github subscribe owner/repo workflows:{name: "workflow-1,workflow2"}
ワークフローの通知を登録すると、デフォルトで有効化されている通知に加えワークフローの通知が有効化されたことがわかります。
利用イメージ
#豆蔵デベロッパーサイトの運用チャネルを Slack に作り GitHub からの通知を流しています。ホスティングしている Netlify のビルド結果も連携しています。ワークフローの起動から、PR 作成からサイトのビルドまでの一連の動きが通知されます。通知には、ワークフローへのリンクやトリガーになったコミットへのリンク、Checks(ビルドやテスト結果など) の状況も記載されているので GitHub のワークフローの画面を見に行く必要もありません。失敗した場合は、Slack 画面からリランも可能です。
ワークフロー起動と実行結果の投稿はスレッドになりますのでトレースしやすくなっています。途中結果はスレッド内だけ、結果はチャネルにも投稿といった具合で Slack に最適化されていますね。
まとめ
#Slack の GitHub インテグレーションに追加されたワークフローイベント通知の設定方法と利用イメージを紹介しました。
今年の2月の記事「GitHub Actions ワークフローにおけるジョブ制御」では、Slack への通知のためのジョブを作り、先行ジョブの成功・失敗を保持してメッセージを出し分けるようにしていました。さらに通知のための Action を使用していました[2]。
通知したい内容にもよりますが、結果通知だけならこのようなジョブは不要で、Slack のインテグレーションを使う方が楽で使いやすくなりました。
全てのイベントは https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#available-events に記述されています。 ↩︎
GitHub の Marketplace には ワークフローから Slack 通知するための Action が記事執筆時点で26個もありました。 ↩︎