簡體   English   中英

如何根據 Azure DevOps 中的分支部署到不同的環境?

[英]How to deploy to different environment depending on the branch in Azure DevOps?

我想在 Azure DevOps 中實現以下管道:

  • 一個構建主要工件的Build階段
  • Dev PreprodProd的 3 個部署階段,將前一階段構建的工件部署到各自的環境中

我可以使用 Azure DevOps 多級管道和分支名稱上的conditions來做到這一點。 但是,當我首先推送到dev分支並且它構建成功,然后我推送說preprod分支作為Fast-forward時,我希望管道能夠重用在dev分支中運行的Build階段已經構建的工件,因為這些是相同的提交。

我在 DevOps 中觀察到的是,即使對於相同的提交,當我推送到每個不同的分支時, Build階段也會重新運行。 是否可以使用基於 YAML 的管道來實現我想要做的事情?

編輯

這個工作流程的重點不是分支,而是分階段部署,從持續部署最新和最偉大的開發提交到為我們的 500 多個內部用戶推出生產就緒軟件。 我想要實現的是一種稱為構建提升的東西,其中一個相同的構建工件被提升到越來越大的用戶圈子。 我很樂意在不擺弄 git 分支的情況下實現這一目標。

這應該是一個評論(因為它更多的是想法,而不是一個真正的工作解決方案)而不是答案,但我擔心我會擴大限制。

在我看來這是不可能的,但讓我詳細解釋一下。 因為您實際需要的是提交流的管道 controller。 您需要的是基於某個分支中提交的外觀的門/批准。 這種認可是可能的。

想象一下,您向Dev分支提交了一個提交。 您的管道開始,部署到Dev環境完成,而不是Preprod的時間,但在此之前,通過調用 Azure Function 進行批准。 您將傳遞此標頭

{
"Content-Type":"application/json", 
"PlanUrl": "$(system.CollectionUri)", 
"ProjectId": "$(system.TeamProjectId)", 
"HubName": "$(system.HostType)", 
"PlanId": "$(system.PlanId)", 
"JobId": "$(system.JobId)", 
"TimelineId": "$(system.TimelineId)", 
"TaskInstanceId": "$(system.TaskInstanceId)", 
"AuthToken": "$(system.AccessToken)",
"BuildId":"$(Build.BuildId)",
"StageName":"$(System.StageName)"
}

在 Azure Function 中,您將獲得構建 ID 和階段名稱。 使用 build id,您可以調用 REST API 來獲取更改並檢查它們是否已經在stageName分支中(在這種情況下它是Preprod 。由於它們不存在,因此階段將失敗。

將此提交移至PreProd分支后,您應該觸發先前失敗的構建以再次檢查條件並獲取已創建的工件。 您可能需要使用某種 web 鈎子,更糟糕的是,目前這是不可能的。 您無法觸發特定階段(請查看文檔)。 您可以嘗試使用失敗的階段進行構建並再次將它們排隊,但在這種情況下,您將再次部署到Dev

所以你看到這是非常難以實現的。 但也許有人會有更好的主意。

是否可以使用基於 YAML 的管道來實現我想要做的事情?

同意 Krzysztof Madej 的觀點,我認為使用基於 YAML 的管道實現您的要求並非不可能。

為了實現它,我們必須確保Preprod分支上的每個提交都與dev分支上的每個提交相同,然后我們才能使用分支名稱上的條件來跳過構建階段

stages:
-stage: Build
   displayName: Build
   and(succeeded(), eq(variables['CommitBranchName'], 'refs/heads/dev'))

然后我們可以通過 git 命令git branch --contains 獲取 CommitBranchName CommitBranchName

但是,我們不能保證每個分支都與 dev 提交相同,azure devops 無法確定這兩個提交是否相同。 觸發構建的事件是提交,而不是提交的內容。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM