shwld.io

デプロイ漏れを検知して通知するGitHub Actionを作った話


mofmofでは fourkeys を用いて開発生産性を計測しています。

あるプロジェクトチームが、複数のサービスを管理していました。 コードレビュー、マージ、検証というフローを辿ってリリースされるのですが、 検証完了後にリリース作業が漏れてしまうケースが有りました。

コミュニケーションやフローの改善での対応もしていますが、未リリースのものがあるかどうかの検知もしたい。

そこで、定期的にデプロイされていないものをチェックしてSlackへ通知するGitHub Actionsを作りました。

作ったGitHub Actions https://github.com/marketplace/actions/check-for-deployment-omissions

この記事ではこのアクションの使い方を紹介します。

1. Slackへ通知するためにアプリを作成する

以下のページへ行き、Slack Appを作成します https://api.slack.com/apps/

このとき、From an app manifest を選択して作成すると、yamlで設定を登録することになるので、以下のyamlを登録します。

display_information:
  name: Check for Deployment Omissions
settings:
  org_deploy_enabled: false
  socket_mode_enabled: false
  is_hosted: false
  token_rotation_enabled: false
features:
  bot_user:
    display_name: Check for Deployment Omissions
oauth_config:
  scopes:
    bot:
      - chat:write
      - chat:write.public

Appが作成されたら、Workspaceにインストールします。 Bot User OAuth Token が発行されるので、それをコピーしておきましょう。

2. デプロイ漏れを検知したいリポジトリにGitHub Actionsを設定する

以下のようなファイルを作成することで設定ができます。

.github/workflows/check-for-deployment-omissions.yml

name: 'check-for-deployment-omissions'
on:
  schedule:
    - cron: '0 0 * * 1'

jobs:
  check-for-deployment-omissions:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: mofmof/check-for-deployment-omissions@v0
        with:
          base_branch: 'main'
          deployment_environment_name: 'production'
          github_token: ${{ secrets.GITHUB_TOKEN }}
          slack_token: ${{ secrets.SLACK_TOKEN }}
          slack_channel: ${{ vars.SLACK_CHANNEL }}

それぞれの設定項目について

チェックを実行したい時間: schedule: に指定してください。上記の設定では、月曜日の朝9時(JST)にチェックを実施します。

base_branch: 本番環境と同期されているブランチを指定します。

deployment_environment_name: base_branchと比較するDeploymentの環境名を指定します

slack_tokenとslack_channel: 設定のために、SLACK_TOKENSLACK_CHANNEL が必要になるので、リポジトリのGitHub Actions用の変数設定を行ってください。

SLACK_TOKEN: 1で作成した Bot User OAuth Token

SLACK_CHANNEL: 通知したいチャンネルの名前 例: general

手動でGitHub Actionsを実行してみよう

上記の場所から、作ったActionを実行してみて、Slackに通知されるか確認しましょう。 差分があってもなくてもSlackに通知されます。

まとめ

GitHub Deploymentを使ってDeploymentを管理している場合は、mainブランチと差異がないかを確認できるこのActionを使ってみてください。

NestJSのGraphQLサーバにApplication Insightsのトレースを仕込む
shwld
2024/02/19
GitHub Copilotを効率よく使うために
shwld
2024/01/29
2024年。今年の抱負
shwld
2024/01/18
DevOps活動の半年間の振り返り:2つのプロジェクトの経験と教訓
shwld
2023/12/07