Microsoft 系のあれこれ

港区の SIer で よくわからんことをしている人です。Xamarin 中心でした。(過去形)

Azure Pipelinesのビルド完了をMicrosoft Teamsに通知するいくつかの方法

本記事はAzure DevOps Advent Calendar 2019 - Qiita 17日目です。
(蛇足ですが、前回の記事書いた後に「あ、そういえばAdventCalenderの季節じゃないか」と AzureDevOps を探したところ見つかったので本記事から参加してみました。)


前回の記事では Azure Pipelines で iOS の CI してみました。
shunsukekawai.hatenablog.com

せっかく CI したなら通知しないとね。ということで通知編です。
いくつかの方法とタイトルにあるのは諸事情(後述します)により、不採用となった方法があるためです。

それではやっていきましょう。

contents:

Teams のアプリから通知する

一番スマートかなと思う方法です。

Teams の会話のその他を選択します。

f:id:ShunsukeKawai:20191216123636p:plain
その他を選択
検索ボックスに「Pipeline」とでも入力します。
f:id:ShunsukeKawai:20191216123701p:plain
pipeだけで出てくる
Azure Pipelines を選択して Teams に追加します。
f:id:ShunsukeKawai:20191216125711p:plain
会話のメニューに追加されている
ボタンを選択します。機能を利用するには設定が必要みたいなので選択してサインインします。
f:id:ShunsukeKawai:20191216123732p:plain
サインイン
そうするとどこの Organization を見るか選択できるようになります。
f:id:ShunsukeKawai:20191216124240p:plain
どこを参照する?

が、ここで諸事情①です。
今回は所属する組織の Microsoft アカウントで Teams に入っています。ですが、AzureDevOps は顧客環境です。
顧客環境にもこちらの組織アカウントで権限が与えられているのですが、Teams 上だとその顧客環境は見えないみたいです。
そのためこの方法は不採用となりました。

ちなみに参照できる場合は Teams の会話で
@Azure Pipelines subscribe https://dev.azure.com/XXXXXXX/YYYYYYY/_build?definitionId=2
みたいな感じでメンションしてあげると
f:id:ShunsukeKawai:20191216125109p:plain
登録されたと返事がきます。

で、ビルドが完了すると通知が来ます。
f:id:ShunsukeKawai:20191216125235p:plain
シンプルでいい感じですね。

Pipeline にタスクとして追加する

Teams に追加できないとなると 自前でポストするヤツをゴニョニョしないといけないのか?と思いつつ、AzureDevOps の Marketplace を探してみました。

f:id:ShunsukeKawai:20191216130425p:plain
Pipeline の編集画面からタスク追加ボタンを押す
検索ボックスに「teams」と入れて検索し内容を見てみると、なんかよさげなのがありました。
Post To Office 365 Connector - Visual Studio Marketplace
最終更新が 2017 年とかだけど、入れてみましょう。(外部アプリは自己責任で)
f:id:ShunsukeKawai:20191216131126p:plain
teams で検索して Post To Office 365 Connector を選択

f:id:ShunsukeKawai:20191216131510p:plain
Get it free を選択
そうするとインストール先の Organization を選択する画面が出てきます。(Teams のアプリと違って顧客環境の Organization も見れる)
顧客環境の管理者に許可が必要みたいなので、あと回しにして自分の環境に一回インストールしてみます。
f:id:ShunsukeKawai:20191216131653p:plain
顧客環境の管理者に許可が必要みたい
f:id:ShunsukeKawai:20191216132042p:plain
自分の環境だと当然インストールできる

その後、もう一度Pipeline の編集画面からタスク追加ボタンを押し、「post」と入力すると先ほど追加したヤツが出てきます。

f:id:ShunsukeKawai:20191216132220p:plain
タスク追加に出てくる
追加するとこんな感じの設定画面です。
f:id:ShunsukeKawai:20191216132424p:plain
Post To Office 365 Connector の設定画面
WebHook の URL は Teams で取得します。
チャネルのメニューからコネクタを選択します。
f:id:ShunsukeKawai:20191216132737p:plain
Teams のチャネルのメニューからコネクタを選択
Incoming Webhook を追加します。
f:id:ShunsukeKawai:20191216132947p:plain
Incoming Webhook を追加
名前と画像(任意)を設定して完了すると URL が生成されるので、コピーして Pipeline 側の Webhook URL に貼り付けます。
f:id:ShunsukeKawai:20191216133327p:plain
名前と画像(任意)を設定して完了すると 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))

としました。

f:id:ShunsukeKawai:20191216134214p:plain
完成形
その他の情報入れたい場合は下記リンク先を参照ください。
Predefined variables - Azure Pipelines | Microsoft Docs

こいつを Pipeline の最後に追加してあげて実行してみます。
すると Teams に通知が決ます。Commit のコメントが複数行だとちょっと表示がズレますがまぁいいでしょう。

f:id:ShunsukeKawai:20191216135648p:plain
Teams 通知

よし、これで行こう。と思った矢先、このタスクを追加するのに顧客の承認が必要で、かつ、このアプリをインストールしてもセキュリティに影響がないことを説明する必要があると言われました。
えぇ…と思いましたが、面倒なことには首を突っ込みたくないのでこの方法も不採用となりました。

メールで通知する

一番簡単な方法です。
正直負けた気がします。
Teams にはチャネルに対してメールアドレスを設定することができます。
そのメール宛に Pipeline の完了を通知する方法です。
Teams のチャネルの設定からメールアドレスを取得します。

f:id:ShunsukeKawai:20191216140302p:plain
チャネルのメールアドレスを取得
そのアドレスを控えておいて AzureDevOps の Project Settings ⇒ Notifications ⇒ New subscription を選択します。
f:id:ShunsukeKawai:20191216140954p:plain
New subscription を選択
ビルド完了時の設定をします。
f:id:ShunsukeKawai:20191216141648p:plain
A build completes を選択
Deliver to に Custom email addressを選択して先ほどに Teams のメールアドレスを設定します。
条件のところにDefinition nameを選択して対象の Pipeline の名前を選択します。2環境以上の場合は or でつなぎましょう
f:id:ShunsukeKawai:20191216141544p:plain
通知条件の設定

で、ビルドを実行するとメール経由で Teams に通知が来ます。

f:id:ShunsukeKawai:20191216142423p:plain
メールアドレス宛に通知が来る

なんとなく美しくないですが、残念ながら今回はこの方法を採用しました。