こんにちは!
ポーラ・オルビスホールディングスのITプロダクト開発チームでスクラムマスターをしている川田です。
突然ですが、みなさん脆弱性の対策はしていますか?
私たちのチームではパッケージマネージャとしてnpmを使用していることもあり、GitHubのDependabotでセキュリティアップデートを検知しています。
Dependabotが検知した内容はGitHub上で確認できますし、自動でプルリクを作成するなど便利な機能がたくさんあります。ですが能動的に確認しに行かなくても、自動的にアップデートを検知して通知することで取りこぼしを無くせると良いですよね。
そのため、何とかしてSlack通知を実現できないものか・・・と考え、試してみました!
GitHubのSlackアプリを使ってみる
Dependabotが作ったプルリクかどうかは考慮せず、とにかく対象のリポジトリでプルリクが作られたら通知するだけであればGitHubのSlackアプリを使えばOKです!
今回の本題ではないので詳細な手順は割愛しますが、Slackの App Directory からアプリをインストールし、チャンネル設定やGitHubアカウントとの紐づけを行った後、通知したいチャンネルで subscribe
コマンドを実行すれば設定完了です。
/github subscribe owner/repo pulls
GitHubアプリのオプションとして、特定のラベルが付いている場合のみ通知するオプションがあります。Dependabotが作成するプルリクには dependencies
ラベルが付与されるので、このオプションを使用すればDependabotのプルリクだけフィルターできるのでは?
/github subscribe owner/repo +label:"dependencies"
と思ってやってみたのですが、残念ながら意図した挙動にはなりませんでした
Dependabotが作成したプルリクを見るとプルリクが作成された後にラベル付けを行っているようなので、Slackに通知される時点ではまだラベルが付いていないものと思われます。
GitHub Actionsを使ってみる
ラベル付けのタイミングが問題であるならば、特定のラベルが付けられたことをトリガーにして通知できるのではないかと考えました。そのため、ラベルが付いたことを検知して動くGitHub Actionsを試してみました。
結論として予想は正しく、無事に通知されました!
作成したGitHub Actionsとしては以下の内容です。
name: Notify pull request opened by Dependabot
on:
pull_request_target:
types: [labeled]
jobs:
pull_request_notify:
runs-on: ubuntu-latest
if: github.event.action == 'labeled' && github.event.label.name == 'dependencies'
steps:
- name: Send custom JSON data to Slack workflow
uses: slackapi/slack-github-action@v1.25.0
with:
payload: |
{
"title": "${{ github.event.pull_request.title }}",
"repository": "${{ github.event.repository.full_name }}",
"url": "${{ github.event.pull_request.html_url }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
ポイントとしては
- L5 :
labeled
によってラベルが付けられたことをトリガーに動かす - L10 :
dependencies
ラベルが付けられたときだけ動かす
といった点です。
また、Slackへの通知はお好みの方法でOKですが、今回はあらかじめSlack側でワークフローを作成し、ワークフローのWebhook経由で送る方法を利用しました。
実際の通知は以下のような感じです!
さいごに
脆弱性対応は避けて通れないものですが、本記事の内容が対応の手間を減らすことに少しでもお役に立てれば幸いです!
(※本記事はQmonus Value Streamの投稿キャンペーン記事です。)