はじめに
GithubのWorkflowシステム使ったことありますか?
Githubの操作をトリガーにして、いろんなことが簡単にできるよ。というテーマでお送りしたいと思っています。
今回は、Issue操作イベントでのSlack通知をやってみようと思います。
通知のイメージはこんな感じです。
使用するツール/拡張機能
- Slack
- Incoming Webhooks
- Github
- Workflow/Actions
- ravsamhq/notify-slack-action@v2
手順
#001. Slackの準備
1. Slackワークスペースを用意。
ない方は新規で作成してください。
(本記事の内容はすべて無料で試すことができます。)
2. Incoming Webhooksアプリを追加
Slack/ワークスペース上でアプリの追加を行います。
「Slackに追加」ボタンを選択してください。
3. Webhook URLの登録
Webhookアプリの設定画面が開くので、通知を送りたいチャンネルを選択します。
保存後に、URLが表示されますのでメモしてください。
Slack側の設定は以上です。
#002. Githubリポジトリの準備
1. Githubリポジトリを用意
リポジトリを作成してください。(既存リポジトリでも可)
2. Secretsの登録(Webhook URLの登録)
GithubのリポジトリのSettings
タブ内のメニュー内にSecurity
という項目を押下し、Actions secrets and variables
の設定を行います。
Repository secrets
を追加します。
ラベル名に、SLACK_WEBHOOK_URL
を入力してください。(このラベル名を実装で使います)
Value名に、先程メモしたURLを入力します。
これでリポジトリのセットアップは完了です。
#003. GitHub Actions - Workflowの作成
1. ファイルの作成
/.github/workflows/slack-notify-github-workflows.yml
ファイルを作成します。
2. ワークフローの定義
以下サンプルコードををGit上にPushしてください。
name: Notify Slack on Issue Activity
on:
issues:
types: [opened, edited, closed, reopened]
jobs:
notification:
runs-on: ubuntu-latest
steps:
- uses: ravsamhq/notify-slack-action@v2
if: always()
with:
status: ${{ job.status }}
notification_title: "{workflow} has {status_message}"
message_format: "{emoji} *{workflow}* {status_message} in <{repo_url}|{repo}>"
footer: "Linked Repo <{repo_url}|{repo}> | <{workflow_url}|View Workflow>"
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
#004. 動作確認
では、Issueを起票してみましょう。
サンプルコードでは、Issueの「起票・編集・クローズ・再オープン」がトリガーで通知が飛ぶようになっています。(on > issue > types
の箇所。)
Slackを開いて、↓↓ みたいになっていたら成功です。
結構簡単ですよね。
少し解説
今回はNotify Slack Actionを利用しました。
今回のサンプルでは、Minimalなものを用意しましたが、メッセージのフォーマットや、メンション設定、ステータスに基づいたアイコンのカスタマイズ設定が細かくできるようです。
もちろん、フォーマットで使用できるContextもたくさんあります。
{branch}
{branch_url}
{commit_url}
{commit_sha}
{emoji}
{repo}
{repo_url}
{status_message}
{run_url}
{job}
{workflow}
{workflow_url}
デバッグ方法
Jobsに以下を登録してActionsを発火させてみてください。
steps:
- run: echo "${{ toJson(github) }}"
Actionsの実行結果を確認すると、通知に使用できるデータを確認することができます。
例えば、Issueのタイトルを使いたいときは、こんな感じに指定すればいいかと思います。
message_format: "${{ github.event.issue.title }}"
まとめ
今回は、Slackの拡張アプリWebhookを使ったGithubの通知Actionsを実装してみました。
参考