Azure Pipelinesのビルド完了をMicrosoft Teamsに通知するいくつかの方法
本記事はAzure DevOps Advent Calendar 2019 - Qiita 17日目です。
(蛇足ですが、前回の記事書いた後に「あ、そういえばAdventCalenderの季節じゃないか」と AzureDevOps を探したところ見つかったので本記事から参加してみました。)
前回の記事では Azure Pipelines で iOS の CI してみました。
shunsukekawai.hatenablog.com
せっかく CI したなら通知しないとね。ということで通知編です。
いくつかの方法とタイトルにあるのは諸事情(後述します)により、不採用となった方法があるためです。
それではやっていきましょう。
contents:
Teams のアプリから通知する
一番スマートかなと思う方法です。
Teams の会話のその他を選択します。検索ボックスに「Pipeline」とでも入力します。Azure Pipelines を選択して Teams に追加します。ボタンを選択します。機能を利用するには設定が必要みたいなので選択してサインインします。そうするとどこの Organization を見るか選択できるようになります。
が、ここで諸事情①です。
今回は所属する組織の Microsoft アカウントで Teams に入っています。ですが、AzureDevOps は顧客環境です。
顧客環境にもこちらの組織アカウントで権限が与えられているのですが、Teams 上だとその顧客環境は見えないみたいです。
そのためこの方法は不採用となりました。
ちなみに参照できる場合は Teams の会話で
@Azure Pipelines subscribe https://dev.azure.com/XXXXXXX/YYYYYYY/_build?definitionId=2
みたいな感じでメンションしてあげると
登録されたと返事がきます。
で、ビルドが完了すると通知が来ます。
シンプルでいい感じですね。
Pipeline にタスクとして追加する
Teams に追加できないとなると 自前でポストするヤツをゴニョニョしないといけないのか?と思いつつ、AzureDevOps の Marketplace を探してみました。検索ボックスに「teams」と入れて検索し内容を見てみると、なんかよさげなのがありました。
Post To Office 365 Connector - Visual Studio Marketplace
最終更新が 2017 年とかだけど、入れてみましょう。(外部アプリは自己責任で)
そうするとインストール先の Organization を選択する画面が出てきます。(Teams のアプリと違って顧客環境の Organization も見れる)
顧客環境の管理者に許可が必要みたいなので、あと回しにして自分の環境に一回インストールしてみます。
その後、もう一度Pipeline の編集画面からタスク追加ボタンを押し、「post」と入力すると先ほど追加したヤツが出てきます。追加するとこんな感じの設定画面です。WebHook の URL は Teams で取得します。
チャネルのメニューからコネクタを選択します。Incoming Webhook を追加します。名前と画像(任意)を設定して完了すると URL が生成されるので、コピーして Pipeline 側の Webhook URL に貼り付けます。
その他の設定は Markdown と build variables も使えるみたいので
Title は
$(Build.DefinitionName) build $(Build.BuildId) complete
としました。
Message は前回も参考にさせていだたいた記事をベースに、
* RequestedFor : $(Build.RequestedFor) * Environment:AdHoc * Configuration:$(Configuration) * Certificate:$(APPLE_CERTIFICATE_SIGNING_IDENTITY) * Provisioning Profile:$(APPLE_PROV_PROFILE_UUID) * Branch:$(Build.SourceBranch) * Last Commit ID:$(Build.SourceVersion) * Last Commit Comment:$(Build.SourceVersionMessage) * Release Note:$(ReleaseNote) [result link](https://dev.azure.com/XXXXXXX/YYYYYYY/_build/results?buildId=$(Build.BuildId))
としました。その他の情報入れたい場合は下記リンク先を参照ください。
Predefined variables - Azure Pipelines | Microsoft Docs
こいつを Pipeline の最後に追加してあげて実行してみます。
すると Teams に通知が決ます。Commit のコメントが複数行だとちょっと表示がズレますがまぁいいでしょう。
よし、これで行こう。と思った矢先、このタスクを追加するのに顧客の承認が必要で、かつ、このアプリをインストールしてもセキュリティに影響がないことを説明する必要があると言われました。
えぇ…と思いましたが、面倒なことには首を突っ込みたくないのでこの方法も不採用となりました。
メールで通知する
一番簡単な方法です。
正直負けた気がします。
Teams にはチャネルに対してメールアドレスを設定することができます。
そのメール宛に Pipeline の完了を通知する方法です。
Teams のチャネルの設定からメールアドレスを取得します。そのアドレスを控えておいて AzureDevOps の Project Settings ⇒ Notifications ⇒ New subscription を選択します。ビルド完了時の設定をします。Deliver to に Custom email address
を選択して先ほどに Teams のメールアドレスを設定します。
条件のところにDefinition name
を選択して対象の Pipeline の名前を選択します。2環境以上の場合は or でつなぎましょう
で、ビルドを実行するとメール経由で Teams に通知が来ます。
なんとなく美しくないですが、残念ながら今回はこの方法を採用しました。