iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 26
0
DevOps

實作 ASP.NET Core 持續整合/交付系列 第 26

Skype Bot 與 TeamCity 整合 2 - TeamCity Notification

前言

上一篇我們簡單的介紹如何透過 Skype bot + TeamCity Restful API 對TeamCity 進行操作,但若要得知工作完成的情況,定時去查詢其實相當沒有效率。運氣很好的事 TeamCity 有許多的 plugin 可以使用(雖然有些好像年久失修,但對 slack 支援度蠻高的)。在這一篇文章我們將用一個簡單的範例,透過 web hook 發送訊息到 skype bot MessageController,告知使用者目前情況,若有錯誤或任何建議,請各位先進不吝提出,謝謝。


介紹

安裝 web hook plugin

Step 1.點選網站下載 tcWebHooksPlugin-0.9.80.83.zip,並放置於TeamCity plugin資料夾下(預設是C:\ProgramData\JetBrains\TeamCity\plugins)
http://ithelp.ithome.com.tw/upload/images/20161227/2009149438YBnxR7CO.png

http://ithelp.ithome.com.tw/upload/images/20161227/20091494npr3k6kgin.png

http://ithelp.ithome.com.tw/upload/images/20161227/20091494UrPUsUTGuv.png

Step 2.重新啟動 TeamCity 服務
http://ithelp.ithome.com.tw/upload/images/20161227/20091494G930DXG90Y.png

Step 3.確認 plugin list 引用成功
http://ithelp.ithome.com.tw/upload/images/20161227/200914943c2uK7aG9k.png

設定 web hook

Step 1.點選 Build Configuration 旁的下拉按鈕,您會發現多了一個web hook的選項
http://ithelp.ithome.com.tw/upload/images/20161227/20091494zNa9JaK2zW.png

Step 2.點選Add Build WebHooks
http://ithelp.ithome.com.tw/upload/images/20161227/200914947p42tjvCA3.png

Step 3.點選中空白區塊加入第一個WebHooks
http://ithelp.ithome.com.tw/upload/images/20161227/20091494Du6pOGLLrD.png

Step 4.輸入你通知的位置,本篇文章在本地測試,所以路徑為:

http://localhost:3979/api/Messages/SendBuildMessage

若您上傳到 Azure web app service,請記得改成您的 url

http://your_azure_web_app_url/api/Messages/SendBuildMessage

我們選擇只勾選 Enable 與 Trigger when build Fails,傳輸資料格式隨便選擇(增加參數需另外設定,我們這邊先不說明)。
http://ithelp.ithome.com.tw/upload/images/20161227/20091494Q1CxVm7QX2.png

撰寫接收程式

Step 1.我們在 MessageController 加入一個 Action,路由為 SendBuildMessage,方法為HttpPost,主要功能為呼叫此 Action 後在 skype 上通知使用者建置失敗訊息。

[HttpPost, Route("SendBuildMessage")]
public async Task<HttpResponseMessage> SendBuildMessage()
{
    var connector = new ConnectorClient(new Uri("https://skype.botframework.com"), "MyAppID", "BotAppPassword");
    IMessageActivity newMessage = Activity.CreateMessageActivity();
    newMessage.Type = ActivityTypes.Message;
    newMessage.From = new ChannelAccount("BotChannelID", "Miniature Schnauzer");
    newMessage.Conversation = new ConversationAccount(null, "ConversationID", null);
    newMessage.Recipient = new ChannelAccount("DuranHsiehID", "謝政廷");
    newMessage.Text = "Build failed";
    await connector.Conversations.SendToConversationAsync((Activity)newMessage);

    var response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}

Step 2.因為我們的程式在 visual studio 執行,尚未上傳 Azure,所以我們透過模擬器下指令 start stress test(這段是透過TeamCity Restful API運作,若您不知道這段如何執行,請參考上一篇)
http://ithelp.ithome.com.tw/upload/images/20161227/20091494zf4nBpg4tw.png

Step 3.TeamCity執行中(我們執行失敗案例)
http://ithelp.ithome.com.tw/upload/images/20161227/20091494pg0X9LZm43.png

Step 4.Skype上機器人告知建置失敗
http://ithelp.ithome.com.tw/upload/images/20161227/20091494TXIN2fmWgu.png


後記

本篇使用的套件也可以傳遞參數與自訂通知內容,但似乎需要更改組態檔案,我們這邊尚未進行詳細測試,若後續有時間研究,再進行補充。除了Webhook外,TeamCity也支援其他不同類型的通知套件,個人發現似乎對Slack支援度頗高的,若有興趣的朋友可以自行玩玩看。


上一篇:Skype Bot 與 TeamCity 整合 1 - TeamCity Restful API 介接
下一篇:Docker 安裝與介紹
返回目錄


參考資料

註:本系列文章將於2016 IT邦幫忙鐵人賽進行同時,一併發佈於個人blogger與dotblog。


上一篇
Skype Bot 與 TeamCity 整合 1 - TeamCity Restful API 介接
下一篇
Docker 安裝與介紹
系列文
實作 ASP.NET Core 持續整合/交付30

尚未有邦友留言

立即登入留言