DEMO場景
當外部請求或系統(tǒng)事件發(fā)生后直撤,在Azure DevOps中使用Service Bus Queue傳遞的變量觸發(fā)Logic App非竿,創(chuàng)建Work item并觸發(fā)Pipeline
使用DevOps Rest Api將特定Build和Work item進行關(guān)聯(lián)
-
使用Services hook將Build的結(jié)果傳到Azure Service Bus并觸發(fā)Logic App,實現(xiàn)對應Work item狀態(tài)的實時自動更新
預備知識
Services hooks
當DevOps項目中發(fā)生一些事件時谋竖,Services hooks可以在其他服務上運行特定任務红柱。Publisher定義一系列事件侮东,Subscription監(jiān)聽這些事件并定義基于這些事件的動作和運行的服務對象。
支持的事件請見Service hooks event reference
Azure Services Bus
Azure 服務總線是一個完全托管的企業(yè)消息代理豹芯,其中包含消息隊列和發(fā)布訂閱主題。命名空間(Namespace)是一個適用于所有消息傳送組件的容器驱敲。消息可以發(fā)送到隊列(Queue)铁蹈,或從隊列接收。
也可以通過主題(Topic)發(fā)送和接收消息众眨。 隊列通常用于點到點通信握牧,而主題則用于發(fā)布/訂閱方案。
對于接收操作娩梨,Service Bus API客戶端啟用兩種不同的顯式模式:
Receive-and-Delete
和Peek-Lock
沿腰。Receive-and-Delete
模式告知代理將它發(fā)送到接收客戶端的所有消息都在發(fā)送時視為已處置。 這意味著在代理將消息置于線路上之后狈定,它會立即被視為已使用颂龙。 如果消息傳輸失敗,則消息會丟失纽什。如果各個消息中包含的數(shù)據(jù)價值較低或者只在很短時間內(nèi)才有意義措嵌,則可以選擇此模式。Peek-Lock
模式告知代理接收客戶端希望顯式處置收到的消息芦缰。消息可供接收方進行處理企巢,同時在服務中保持在exclusive lock下,以便其他競爭接收方無法看到它让蕾。
Azure DevOps REST API
REST API是支持HTTP操作的服務端點浪规,這些操作提供對服務資源的創(chuàng)建,檢索探孝,更新或刪除訪問笋婿。例如Builds - Queue API,使用parameters
傳遞參數(shù)再姑。
POST https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=6.1-preview.6
準備工作
- Azure Service Bus資源
- Azure Logic App資源
- Azure DevOps Project
步驟
A. 自動觸發(fā)并使用變量跑Pipeline
-
自定義work item的模板萌抵,加入?yún)?shù)等所需欄位和狀態(tài)。
-
之后新建Work item時你會用到欄位的name元镀。
-
傳遞的變量會放在overrideParameters中绍填。
-
右上角新建這些Variables,務必勾選可以override栖疑。
-
使用Services Bus Queue觸發(fā)的Logic App讨永,Parse消息取到變量。其中peek-lock保證每一條消息處理完成后才會被丟棄遇革。
-
選擇DevOps相關(guān)的action卿闹,身份驗證后建立與Azure DevOps的連接揭糕,新建一個work item。其中自定義的欄位使用Other Fields進行傳遞锻霎。左側(cè)即為之前提到的欄位name著角,右側(cè)為parse出來的變量值。
-
觸發(fā)Azure Pipeline旋恼,使用傳遞的變量新建一個Build吏口,變量寫在Parameter中。變量值可以用parse出來的冰更,也可以用work item中的产徊。
-
至此自動觸發(fā)并使用變量跑Pipeline已完成,最后complete這條消息蜀细,代表處理完成舟铜。
B. 實時自動更新Work item狀態(tài)
-
在新建Build后加入更新狀態(tài)System.State。
-
關(guān)聯(lián)Work item和其對應的build在這里使用tag傳遞Work item ID的方式完成奠衔。首先在Azure DevOps中新建一個PAT谆刨。
-
使用Azure DevOps Rest Api將創(chuàng)建的Build加上TAG。這里把PAT存在了Keyvault當中归斤,在身份驗證的password中引用痴荐。
-
在DevOps的Project Setting中選擇Services hooks -> Azure Services Bus。Trigger為Build成功官册,使用不同于A中的Services Bus Queue生兆,填入其連接字符串。(默認只有project administrators有權(quán)限膝宁,請進行相關(guān)授權(quán))
-
使用不同于A中的另一個Service Bus Queue來接收消息鸦难,觸發(fā)Logic App2。當接收到Build成功的消息后员淫,使用Azure DevOps Rest Api讀取TAG內(nèi)容合蔽。
-
更新對應Work item的狀態(tài)。
-
使用Service Bus Explorer發(fā)送json格式消息進行測試介返。
相關(guān)閱讀
Integrate with service hooks - Azure DevOps | Microsoft Docs