CircleCIと連携してビルド結果をTypetalkに通知しよう

Typetalkは外部のサービスと連携して、アラートやビルド結果などをボットで通知できます。本記事では、CircleCIとTypetalkを連携してビルド結果を自動で通知する方法をご紹介します。

CircleCI / CircleCI Orbとは?

CircleCIとは、継続的インテグレーション(CI)/継続的デリバリー(CD)をSaaS形式で提供するサービスです。ソースコードを修正すると、自動でビルドしてデプロイするという一連の流れをサポートします。同種のツールに、最も有名なツールの一つであるJenkinsがあります。

CircleCI Orbは、CircleCI中の設定を流用するための仕組みです。Orbをうまく活用すると、各プロジェクトごとに記述する必要があった同種の設定を劇的に減らすことができます。Orbは公式で提供されているものもありますが、独自にOrbを作成して公開したり、公開されたOrbを各ユーザーが利用できたりもします。

Typetalk Orbとは?

Typetalk Orbは、今回私たちが作成したOrbです。CircleCIからTypetalkにメッセージを送信する際の設定を受け持ちます。実際に、私たちがGitHubに公開しているBacklog関連のライブラリにTypetalk Orbを適用した設定の一部を抜粋します。これだけのシンプルな記述で、Typetalkにメッセージ送信をすることができます。

.circleci/config.yml

Typetalk Orbは、下記のOrbレジストリ / ソースコードリポジトリに登録されています。

Typetalk Orbの使い方

CircleCIセキュリティ設定の変更

CircleCI公式サポート以外のOrbを利用するために、セキュリティの設定変更が必要です。CircleCIの”ORGANIZATION SETTINGS > Security >Orb Security Settings”から、Orbを使えるように設定できます。

CircleCI 設定

Typetalkボット/トークンの設定

Typetalk Orbでは、Typetalkのボットとそのトークンを利用します。まずはそれらを作成します。ボットの作成手順は、Typetalk APIドキュメントを参照ください。「メッセージの投稿」ができればいいため、APIスコープにはtopic.postだけ有効にすれば問題ありません。

次に、先ほど作成したトークンを、CircleCIに登録します。トークンは秘匿情報ですので、ソースコードにべた書きして誰でも見られる状態にしてはいけません。CircleCI上のプロジェクト環境変数設定画面にトークンを設定します。

  • Name : TYPETALK_TOKEN
  • Value : <先ほど取得したTypetalkトークン>

CircleCI トークン

なお、環境変数設定画面で入力したトークンは、登録後はマスクされて表示されます。登録者といえど元の値を見ることはできなくなるので、環境変数の登録に失敗した場合は、一度削除してから再登録してください。

notifyコマンド : 汎用的なメッセージ送信

Typetalk Orbは2種類のメッセージ送信をサポートしています。1つ目はnotifyコマンドで、汎用的なメッセージの送信に利用できます。

送信結果は、下記の画像のようになります。この画像中のメッセージは、messageを指定しない場合のメッセージです。

CircleCI 通知

statusコマンド : ビルド結果を通知

2つ目は、statusコマンドです。ビルド結果をTypetalkに通知します。オプションによって、成功/失敗時のメッセージをカスタマイズしたり、成功時には通知を飛ばさないようにもできます。

上述のnotifyコマンドと異なる点は、以下の通りです。

  • ビルドの成功/失敗に応じて、メッセージや通知可否を設定できる
  • 途中でビルドが失敗しても、statusコマンドは必ず実行される(逆に、notifyコマンドはその前までの処理が一つでも失敗していると実行されない)

下記の画像は、ビルド成功時のstatusコマンドの結果です。

CircleCI ステータス

ビルド結果のチャット通知は、CIサービスを使う際のよくある用途の一つです。statusコマンドを使って、開発チームメンバーとビルド結果を共有してみましょう。チャットに通知することで、問題があったときに即座に反応する、してもらうことができ開発も捗るはずです。

CircleCIをご利用でビルド結果をTypetalkに送信したい場合は、ぜひこちらのTypetalk Orbの利用を検討してみてください。

▼Typetalkの使い方を解説した記事はこちら