2017年3月3日 星期五

the DevOps journey - 在VSTS CI(Continuous Integration)中發送Line通知

需求很簡單,我們希望在VSTS的程式碼Code Check In(Code pushed)、Build Success/Fail、或是Work item發生了改變時,透過Line發送通知給特定人員(專案成員、PM…etc.)

會有這個需求很單純,我們希望通知(notification)更加即時,每當任何團隊成員簽入程式碼,或伺服器端的建置(Build)完成有結果之後,相關人員都能夠立即得到通知。過去,我們是用email,隨著各種IM肆無忌憚的入侵我們的生活,現在用推送訊息來通知也是很合理的…

在台灣,你不可能不用Line,幾乎沒有人能跟朋友說自己沒有Line帳號,因此,在VSTS CI (Continuous Integration)當中整入Line通知也是理所當然的。

怎麼做呢?

首先你可以在VSTS的Team Project的管理畫面中,找到Service Hooks,這是一個好用的功能,他可以幫你在該專案特定事件發生時,連結到外部系統並觸發某個動作:

如果你按下上圖的新增鈕,會發現其實已經很多外部系統可以連結了,例如大家很熟悉的Slack、Trello…,很不幸的,我們要發訊息的Line不在裡面:

但不要緊,你會發現我們可以透過Web Hook觸發一個http post,我們只要在該http post裡面來發送Line訊息即可。因此,我們在上圖中的畫面選擇Web Hook,接著按下Next,會出現下圖中的畫面,在該畫面上你可以選定Trigger,也就是,當哪一個事件發生時,要觸發http post來發送通知:

你會看到,選項中有Code Checked in(支援git版控的專案則會出現code pushed),以及Build completed、WorkItem Created/Updated/Deleted…等觸發事件,請選擇你要的。

然後按下Next,接下來出現的Action畫面,你只需要輸入 URL即可,也就是您選定的事件發生時,要以Http post通知哪一個URL?

你可以自行設計一個可接受http post的WebAPI,並在其中發送Line訊息。如果你還不知道該怎麼設計,我們特別幫你做了一個,讓你可以嘗嘗鮮玩一玩。(其實是我們團隊自己要用的啦…)

請先保留上面這個畫面,別關閉。然後開啟另一個瀏覽器,輸入底下網址:
http://isbaas.azurewebsites.net/VSTSWebHook/default.aspx
將會出現底下畫面,這是一個VSTS WebHook URL產生器:

請依照上圖中的步驟,填妥上面該WebHook URL的用途,按下產生鈕,接著會看到上面產生出一串GUID(WebHook URL),產生出GUID之後,請接著按下上圖(3)的按鈕,將會出現底下的Line登入畫面(這是Line的網頁,而非我們開發的網頁):

如果你還記得,我們前面曾介紹過的Line Notify機制,大概就知道我們準備在該WebHook中透過Line Notify來發訊息(而非用Line Bot),上面的這個登入畫面,就是Line的OAuth機制,用來取得可透過Line Notify發訊息給用戶的Token。

請用您想要接收到訊息的Line帳號登入,按下Login之後會出現底下畫面,讓你確定你要用哪一個帳號(或群組)來接收通知:

請選定後按下Agree and connect,如果一切順利,接著會出現底下畫面:

請牢記上圖中藍色的URL,並將其複製到剛才我們做到一半的WebHook URL輸入畫面中貼上:

按下Finish之後就大功告成囉,你會發現,未來當您的Team Project剛才選定的Trigger發生時,你的Line就會收到來自Line Notify的通知:

你可以把剛才上面的藍色URL貼到多個WebHook Trigger中,這樣當相對的Trigger被觸發時,你剛才綁定的Line帳號都會以Line Notify收到VSTS傳來的通知。

如果除了你自己以外,你也想讓其他團隊成員也收到這些通知,你也可以把剛才的藍色URL分享給團隊成員,請他將該URL貼到瀏覽器上,會出現底下畫面,同樣的按下『訂閱上述WebHook』,並且綁定Line帳號,即可讓您的team member和您一樣,在事件觸發時收到Line Notify的通知訊息:

透過這個簡單的設定,你的VSTS CI Build/Check In(或WorkItem更新)都會即時的以Line通知您,如果有興趣的話就玩玩看囉。以後找時間,我再來介紹這是怎麼實現的…

免責聲明: 以上VSTS WebHook服務網址是我們為內部團隊自用所開發的服務,我們不對此服務進行任何瑕疵擔保。您的VSTS Action JSON資料將會經過此WebHook以及微軟Azure Web App雲端服務,並透過Line Notify機制傳送給予綁定該WebHook的Line帳號,但我們並不會收集和使用您的Action JSON資料。

沒有留言: