ソフトウェアエンジニアインターンのhiroです。
FLYWHEELのエンジニアリングプロセス・セットアップを規定しているflywheel-standardを自分でこまめにチェックしなくても「更新があったら自動的にSlackに通知が届けば便利だよなー」という話をSlackでしていたところ、「ちょっとhiroさんやってみたら?」という流れになったので、折角なので話題のツール、GitHub Actionsで試しに使ってみました。
GitHub上で管理しているドキュメントに重要な変更があった際、定期的なチェックをしていないとうっかり見逃してしまうことも考えられます。そこでGitHub Actionsの出番です。リポジトリにpushやプルリクエストなどのイベントが発生した時に、定義したワークフローに従ってCI/CDなどが実行出来る優れ物です。今回はリポジトリの docsかbinディレクトリの中身が master ブランチで変更された時、 Slack の特定のチャンネルに通知されるワークフローを作ってみたいと思います。#engineering というチャンネルに対して配信する想定です。
今回ワークフローを構成するリポジトリの構造は以下の通りです。ワークフローは.github/workflowsディレクトリでYAMLファイルを用いて定義できます。
flywheel_standard ├── docs ├── bin └── .github └── workflows └── upload.yaml
次に、Slackと連携する為にGitHub Marketplaceから対応するActionを探します。ActionとはGitHubや外部ツールのAPIを活用するプラグインのようなものと捉えていただければいいと思います。GitHub Marketplaceではコードレビュー用のツールやクラウドサービスへのデプロイ、各種チャットサービスとの連携など、様々な種類のActionが用意されており、それらをワークフローを定義するYAMLファイルから簡単に参照することができます。今回は、Slackと連携をするためにpullreminders/slack-actionを使おうと思います。ここからはこのActionのセットアップ手順に沿って進めていきたいと思います。
こちらのActionを使う為には、まずはSlackに投稿するためのbotユーザーを通知する対象のSlackで登録する必要があります。
Slackで取得したアクセストークンを暗号化されたシークレットとしてとしてGitHubのリポジトリに登録します。リポジトリのSettings→Secretsに行き、アクセストークンを登録してください。ここでは登録するシークレットの名前を`SLACK_BOT_TOKEN`とします。
準備が整ったところで、upload.yamlに以下のコードを書きます。
name: notify
on:
push:
branches:
- master
paths:
- 'docs/**'
- 'bin/**'
jobs:
notify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Send notification to Slack when master/docs has been updated
uses: pullreminders/slack-action@v1
with:
# "channel"にSlackチャンネルIDを代入
args: '{\"channel\":\"XXXXXXXX\", \"text\":\"flywheel_standardが変更されたよ\"}'
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
スキーマを知らない方でも、なんとなくやっていることは分かるのではないでしょうか。基本的には`on:`でワークフローを走らせるためのトリガーを指定して、`jobs:`で実際のワークフローを構築する流れになります。ここで気をつけるべき点は以下の通りです。
細かい仕様はこちらのドキュメントを参照していただけると良いと思います。
それでは、実際に走らせてみましょう。完成したコードをpushします。ワークフローの状況はリポジトリのActionsタブで確認できます。
ドキドキ…ドキドキ…
わーい!
今回は簡単にGitHub ActionsでリポジトリとSlackを連携してみました。リポジトリ単位でワークフローを定義・実行できるのは非常に強力で、使い方次第では開発の心強い味方になりそうです。
FLYWHEELでは、最新のツールを導入することに積極的なインターンを募集中です!