Heroku ChatOps (Slack 統合)
最終更新日 2024年04月26日(金)
Table of Contents
仕組み
Heroku ChatOps では、Heroku Pipelines の機能を使用して、共同作業によるデプロイワークフローを Slack にもたらします。
Heroku ChatOps は、従来の Heroku デプロイに追加される機能もいくつか提供します。Heroku ChatOps を使用してデプロイするとき、GitHub 上のコミットのステータスチェックも行われ、テストに合格したコードだけがデプロイされることを保証します。また、コードがデプロイされたことを GitHub に通知して、デプロイの成功または失敗の記録がプルリクエストに残るようにします。
はじめに
前提条件
Heroku ChatOps のインストールと設定には、アプリを追加および承認するための Slack アクセス許可が必要です。Slack アプリ管理についての詳細は、こちらを参照してください。
Heroku ChatOps はパイプラインを中心に構築されるため、ChatOps の機能を利用するには、アプリケーションがパイプラインに含まれている必要があります。
ここをクリックして開始してください。
アカウントを設定する
/h login
アクセス許可
Heroku ChatOps を使用するには、Heroku と GitHub にサインインする必要があります。Heroku と GitHub でのアクセス許可が ChatOps にもそのまま引き継がれます。
Heroku
アプリの所有者または共同作業者である場合、そのアプリで ChatOps を使用するために必要なすべてのアクセス許可を持っています。
Heroku Enterprise Team のメンバーである場合、アプリで ChatOps を使用するには deploy アクセス許可が必要です。
GitHub
GitHub リポジトリがパイプラインに接続されていることを、パイプラインの Settings
タブ経由で確認します。
パイプラインにリンクされた GitHub リポジトリの所有者または共同作業者である場合、そのパイプラインで ChatOps を使用するために必要なすべてのアクセス許可を持っています。
GitHub 組織のメンバーである場合、そのパイプラインで ChatOps を使用するには write アクセス許可が必要です。
コードをアプリにデプロイする
Heroku ChatOps を使用してコードをアプリにデプロイする方法には、デプロイフローと、パイプラインのプロモーションの 2 つがあります。デプロイとプロモーションの両方で、Slack のスレッドを使用して、デプロイまたはプロモーションが開始してから最後の dyno の再起動が完了するまで随時、更新情報を提供します。
各ステップはスレッドに保存されます。
デプロイ
基本的なデプロイ
/h deploy PIPELINE_NAME to STAGE_NAME
特定のブランチのデプロイ
/h deploy PIPELINE_NAME/BRANCH_NAME to STAGE_NAME
複数のアプリがステージにあるときのデプロイ
/h deploy PIPELINE_NAME to STAGE_NAME/APP_NAME
デプロイ前チェックの失敗を無視した強制デプロイ
ステータスチェックが失敗している状態でアプリをデプロイしようとすると、デプロイが拒否されます。
deploy!
を使用して強制的にデプロイする必要があります。
/h deploy! PIPELINE_NAME to STAGE_NAME
プロモーション
パイプラインのプロモーションには、手動によるデプロイワークフローに勝る追加の利点がいくつかあります。たとえば、本番環境へのリリースに、ステージングへのリリースとまったく同じコンパイル済みコードが含まれることが保証される上、プロモーションは slug の再コンパイルよりも高速になります。
基本的なプロモーション
デフォルトでは、ステージングから本番環境にプロモートします。
/h promote PIPELINE_NAME
上流のステージを指定することもできます。特定の上流ステージから本番環境にプロモートします。
/h promote PIPELINE_NAME from UPSTREAM_STAGE
ステージの複数のアプリ
上流ステージに複数のアプリがある場合は、プロモート元のアプリを指定する必要があります。
/h promote PIPELINE_NAME from UPSTREAM_STAGE/APP_NAME to DOWNSTREAM_STAGE
下流ステージに複数のアプリがある場合は、プロモート先の下流アプリを指定する必要があります。
/h promote PIPELINE_NAME from UPSTREAM_STAGE/APP_NAME to DOWNSTREAM_STAGE/APP_NAME
あるいは、下流ステージに複数のアプリがある場合は、ターゲットアプリのリストをカンマで区切って指定することもできます。
/h promote PIPELINE_NAME from UPSTREAM_STAGE/APP_NAME to DOWNSTREAM_STAGE/APP_NAME,APP_NAME2
または、下流ステージの複数のアプリにプロモートする別の方法として、すべての下流アプリにプロモートすることを指定できます。
/h promote PIPELINE_NAME from UPSTREAM_STAGE/APP_NAME to DOWNSTREAM_STAGE/all
デプロイ前チェックの失敗を無視した強制プロモーション
ステータスチェックが成功していない状態でアプリをプロモートしようとすると、プロモーションは拒否されます。 チェック結果を無視するにはプロモーションを強制する必要があります。
/h promote! PIPELINE_NAME
最新リリースの表示
デフォルトステージの最新のコードデプロイと設定変更を表示できます。
本番ステージへのリリース
/h releases PIPELINE_NAME
特定ステージ向けのリリース
staging
や production
のように、ステージを指定することもできます。
/h releases PIPELINE_NAME in STAGE_NAME
パイプライン情報
/h info PIPELINE_NAME
デプロイ可能なパイプライン
デプロイ可能なパイプラインのリストを取得できます。
/h pipelines
CI やその他のパイプラインイベントを Slack に接続する
プルリクエストのオープン、Heroku ダッシュボードでのデプロイまたはプロモーションの実行、CI テスト合格などのパイプラインイベントに関して通知を受けたい場合に、任意のパブリック Slack チャンネルに通知をルーティングすることができます。
パイプラインの通知をチャンネルにルーティングする
/h route PIPELINE_NAME to #CHANNEL_NAME
パイプラインの通知をチャンネルにルーティングすると、通知の受信が始まります。次に示すのは、CI に関する通知の例です。
パイプライン通知のルーティングでは現在、1 つの Slack チャンネルのみをサポートしています。CLI から開始されたパイプラインイベントは表示されません。
チャンネルへのパイプライン通知のルーティングを停止する
パイプラインの通知を無効にすることもできます。
/h route:disable PIPELINE_NAME
チャンネルにルーティングされているパイプラインを一覧表示する
/h route
チャンネルにルーティングされているパイプラインの通知設定を変更する
設定するチャンネル内で /h route
を実行し、ドロップダウンからパイプラインを選択します。
ChatOps の通知設定を切り替えることによって、チャンネルでのメッセージをカスタマイズできます。
チャンネルにルーティングされているパイプラインごとに、以下の設定があります。
App deployments (アプリのデプロイ)
他の Slack チャンネルからパイプラインがデプロイまたはプロモートされたときに通知を受信します。Heroku ChatOps コマンドを実行するチャンネル内でも引き続き、更新情報を受信します。App health (アプリヘルス)
アプリヘルスしきい値アラートを使用すると、指定した期間中、アプリの Web dyno で p95 応答時間またはエラー率がしきい値設定を超えた場合に通知を送信することによって、アプリケーションのヘルスを監視できます。パイプラインをルーティングした後、パイプラインのアプリに対して設定した任意のアラートに関してしきい値アラート通知を受信できます。
アラートモニターは、Application Metrics (アプリケーション関連のメトリクス) で設定できます。
Slack 内では、アラートの通知と、アプリヘルスが良好な状態に戻ったときの通知を受信します。メッセージリンクをクリックすると、さらに調査するか、またはアラートしきい値の設定を調整するための 「Application Metrics」 (アプリケーション関連のメトリクス) が表示されます。
GitHub Activity (GitHub アクティビティ)
プルリクエストの変更やコミットステータスの更新などの GitHub イベントに関する通知を受信します。
アンインストール
Slack チャネルから Heroku ChatOps を削除するには、Slack でアプリの設定ページに移動して Remove App
を選択します。設定ページに移動するには、サイドバーで Apps
(アプリ) ヘッダーを選択し、View
Heroku (Heroku の表示)、Settings
(設定) の順に選択します。詳細は、Slack のヘルプセンターの記事を参照してください。
既知の制限
ChatOps では、プライベートの Slack チャンネルや、GitHub Enterprise を使用している Slack チームへの通知のルーティングはサポートしていません。
よくある質問
ChatOps にはどのようなアクセス許可が必要ですか?
Heroku アカウントのアクセス許可: /h login
で Heroku アカウントを Heroku ChatOps に接続するときに、次のアクセス許可を要求されます: すべてのアカウント、アプリ、リソースの読み取りと書き込みのアクセス。
これらのアクセス許可は、パイプラインの一覧表示や、アプリのデプロイまたはプロモーションなどの操作を実行するために必要です。
GitHub アカウントのアクセス許可: /h login
で Heroku アカウントを GitHub に接続するとき、次のアクセス許可を要求されます: アカウントとパブリックおよびプライベートのリポジトリへのアクセス。
これらのアクセス許可は、プルリクエスト時にコミットステータスのチェックやデプロイの作成などの操作を実行するために必要です。
ChatOps がアクセスできる Heroku アプリまたは GitHub リポジトリを制限できますか?
Heroku ChatOps では、個人的にアクセスできる Heroku アプリは制御できますが、それ以上のきめ細かな制御はありません。Slack 内の他のユーザーが各自のアプリを制御することも (アプリへのアクセス許可も持っている場合を除き) 許可されていません。
GitHub アプリでは、リポジトリのきめ細かい制御が可能ですが、この機能は Heroku ChatOps にまだ統合されていません。スケジュールの確約はできませんが、このことは Heroku で確かに認識されています。Heroku Changelog に注目しておいてください。
Slack は私の GitHub または Heroku アカウントにアクセスできますか?
いいえ。あなたの GitHub および Heroku アカウントにアクセスできるのは Heroku ChatOps だけです。GitHub アクセストークンや Heroku アクセストークンは決して Slack と共有されません。
「この GitHub リポジトリにアクセスできることを確認してください」というエラーが表示されるのはなぜですか?
GitHub 組織またはリポジトリの所有者が ChatOps を使用してデプロイしようとすると、次のエラーが発生します。
Unable to access XXX
Please make sure you have access to this GitHub repository.
Read more about permissions and try to sign in to GitHub again.
通常、このエラーが発生するのは、ユーザーの GitHub トークンで接続先のリポジトリにアクセスしようとして 404 が返された場合です。GitHub 側での制限強化により、設定されたパイプラインに ChatOps のユーザーがアクセスできない場合があります。おそらく、アクセス許可が正しくありません。
以下の 3 つの手順を実行してください。
- Slack で、
/h logout
、/h login
の順に入力します。ご使用の Heroku アカウントと GitHub アカウントを接続してから再試行します。 - 「GitHub UI」 > 「repository_name」 > 「Settings」 (設定) > 「Collaborators & teams for the repository」 (リポジトリの共同作業者とチーム) で、GitHub ユーザーに管理者権限があることを確認します。
- 「OAuth Application authorizations」 (OAuth アプリケーション認証) (https://github.com/settings/applications) > 「Authorized OAuth Apps」 (承認された OAuth アプリ) > 「Heroku ChatOps」 にアクセスし、適切な組織に緑色のチェックマークが付いていることを確認します。