Skip to content

smatsumt/github-slack-integration-lambda

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub - Slack Integration with AWS Lambda

GitHub で以下のイベントが発生したときに、Slack にメンション付きメッセージを飛ばします。

  • Issue, PR の本文・コメントでメンションされた
  • review がリクエストされた
  • review が返ってきた

AWS Lambda / API Gateway を利用しています。CloudFormation により、必要なリソースが一通りデプロイされるようにしています。

セットアップ

デプロイ方法

cp config-sample.json config.json
vi config.json  # GitHub ユーザ名 -> Slack メンバーID の対応を設定してください
make

成功すれば、"GitHubHookURL" が画面に出力されます。

"Slack メンバー ID" は "U3KFKE98F" といった文字列です。ユーザ名ではありません(Slack API の仕様変更で、メンションをするにはメンバーIDが必須になりました。) メンバー ID は、各ユーザのプロフィールから調べることができます。設定ファイルでは先頭に "@" をつけるようにしてください。

初回はいくつかの設定項目が聞かれます。"SlackURL" には、通知を飛ばすチャンネル用の Slack WebHook URL を指定してください。

設定をやり直す場合は、

make reconfigure

を実行してください。

GitHub 設定方法

いくつかのリポジトリに設定する場合 (GitHub App として登録)

  1. GitHub App の登録画面に進む
    1. 右上のユーザアイコンをクリックし、出てくるメニューから "Settings" をクリック
    2. 左側のメニューから "Developer settings" をクリック
    3. “New GitHub App” をクリック
  2. GitHub App の設定
    1. “Git Hub App name” は適当につける
    2. “Webhook URL” に “(デプロイ時に出力される GitHubHookURL)” を設定
    3. “Repository permissions” で “Issue”, “Pull Request” を “Read-ony” に設定
    4. “Subscribe to events” に “Issue comment”, "Issues", "Pull request", "Pull request review", "Pull request review comment" をチェック
    5. "Create GitHub App" をクリック
  3. private key の生成を促されるので、生成する
  4. 通知を有効にするリポジトリに、設定した GitHub App をインストール
    1. 右上のユーザアイコンをクリックし、出てくるメニューから "Settings" をクリック
    2. 左側のメニューから "Developer settings" をクリック
    3. 先程作った App があるので、"Edit" をクリック
    4. 左側のメニューから "Install App" をクリック
    5. インストールするリポジトリを選択

単発のリポジトリにのみ設定 (リポジトリの WebHook として登録)

  1. "WebHook" を追加
  2. "WebHook" の設定
    1. "Payload URL" に、“(デプロイ時に出力される GitHubHookURL)” の値を設定してください。
    2. "Content Type" には "application/json" を指定してください。
    3. "Which events would you like to trigger this webhook?" には、"Let me select individual events." を選び、"Issue comments", "Issues", "Pull requests", "Pull request reviews", "Pull request review comments" にチェックを入れてください。

参考情報

基本的な流れ

デプロイが完了すると、GitHub に PR やメンションつきのメッセージがくると、github_webhook_lambda.py をソースとする lambda が呼び出されます。

github_webhook_lambda.py では、GitHub のイベント情報 (JSON 形式) を読み取って、必要であれば Slack に通知を投げます。通知先 URL はデプロイ時のパラメータ "SlackURL" で設定した箇所になります。

GitHub からのメッセージ

GitHub App として連携すると、各種イベントが発生したときに "Webhook URL" にイベントが送付されます。

イベントの例は tests/testdata にある各種 json ファイルにありますので、そちらを参照ください。

Slack メッセージのフォーマット関連

About

GitHub mention / review request Slack notification lambda with CloudFormation template

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published