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?

こんにちは!
ポーラ・オルビスホールディングスのITプロダクト開発チームでスクラムマスターをしている川田です。

突然ですが、みなさん脆弱性の対策はしていますか?:muscle:
私たちのチームではパッケージマネージャとしてnpmを使用していることもあり、GitHubのDependabotでセキュリティアップデートを検知しています。

Dependabotが検知した内容はGitHub上で確認できますし、自動でプルリクを作成するなど便利な機能がたくさんあります。ですが能動的に確認しに行かなくても、自動的にアップデートを検知して通知することで取りこぼしを無くせると良いですよね。
そのため、何とかしてSlack通知を実現できないものか・・・:thinking:と考え、試してみました!

GitHubのSlackアプリを使ってみる

Dependabotが作ったプルリクかどうかは考慮せず、とにかく対象のリポジトリでプルリクが作られたら通知するだけであればGitHubのSlackアプリを使えばOKです!:ok_hand:

今回の本題ではないので詳細な手順は割愛しますが、Slackの App Directory からアプリをインストールし、チャンネル設定やGitHubアカウントとの紐づけを行った後、通知したいチャンネルで subscribe コマンドを実行すれば設定完了です。

/github subscribe owner/repo pulls

GitHubアプリのオプションとして、特定のラベルが付いている場合のみ通知するオプションがあります。Dependabotが作成するプルリクには dependencies ラベルが付与されるので、このオプションを使用すればDependabotのプルリクだけフィルターできるのでは?

/github subscribe owner/repo +label:"dependencies"

と思ってやってみたのですが、残念ながら意図した挙動にはなりませんでした:sob:
Dependabotが作成したプルリクを見るとプルリクが作成された後にラベル付けを行っているようなので、Slackに通知される時点ではまだラベルが付いていないものと思われます。

image.png

GitHub Actionsを使ってみる

ラベル付けのタイミングが問題であるならば、特定のラベルが付けられたことをトリガーにして通知できるのではないかと考えました。そのため、ラベルが付いたことを検知して動くGitHub Actionsを試してみました。

結論として予想は正しく、無事に通知されました!:clap:
作成したGitHub Actionsとしては以下の内容です。

dependabot.yml
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経由で送る方法を利用しました。

実際の通知は以下のような感じです!

image.png

さいごに

脆弱性対応は避けて通れないものですが、本記事の内容が対応の手間を減らすことに少しでもお役に立てれば幸いです!:grinning:

(※本記事はQmonus Value Streamの投稿キャンペーン記事です。)

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?