簡體   English   中英

如何在 azure devops 上的項目中觸發多個管道,而其他管道沒有排隊等待在第一個管道上完成運行

[英]How to Trigger multiple pipelines in a project on azure devops without the other pipeline being queued for completing run on 1st pipeline

我在 github 上有兩個存儲庫,其中托管代碼 ne 用於前端,其他用於后端。 我在 azure devops 的項目中設置了 2 個 yaml CI-CD 管道,其中一個配置為觸發前端存儲庫中的更改和后端存儲庫中的其他更改。 當我觸發前端 repo 中的任何更改時,前端管道被觸發,當我觸發后端 repo 中的任何更改時,后端管道被觸發。

我已經設置了多級 yaml 管道,例如:在兩個管道中構建->部署->運行測試。當我同時觸發兩個管道時,一個管道排隊等待直到 1 個管道的第一階段完成,然后是第一個第 2 管道的階段被觸發,然后是第 1 管道的第 2 階段,然后是第 2 管道的第 2 階段。 我想避免這件事。

 FrontEnd Pipeline-> stage 1    
 BackendEnd Pipeline-> stage 1 
 FrontEnd Pipeline-> stage 2    
 BackendEnd Pipeline-> stage 2 
 FrontEnd Pipeline-> stage 3    
 BackendEnd Pipeline-> stage 3

這需要很多時間,並說代理很忙。 我想同時運行這些管道,例如:

FrontEnd Pipeline-> stage 1 
FrontEnd Pipeline-> stage 2
FrontEnd Pipeline-> stage 3 

被單獨觸發並且

BackendEnd Pipeline-> stage 1
BackendEnd Pipeline-> stage 2
BackendEnd Pipeline-> stage 3

同時單獨觸發,以便兩個管道都執行自己的階段。 這怎么可能實現。

不幸的是,我很確定這種類型的功能取決於您願意支付多少。 在我的組織中,我們為 2 個代理付費,這允許同時執行 2 個階段。 這些階段可以在單個管道內或跨不同的管道。

有關詳細信息,請參閱此 Microsoft 文檔。 我相信這會為您指明正確的方向。 https://docs.microsoft.com/en-us/azure/devops/pipelines/licensing/concurrent-jobs?view=azure-devops&tabs=ms-hosted

如果您只有一個代理,那么它將逐步完成 2 個同時觸發的管道,就像您發布的那樣

 FrontEnd Pipeline-> stage 1    
 BackendEnd Pipeline-> stage 1 
 FrontEnd Pipeline-> stage 2    
 BackendEnd Pipeline-> stage 2 
 FrontEnd Pipeline-> stage 3    
 BackendEnd Pipeline-> stage 3

我相信您可以觸發具有特定代理池的管道,這可能允許您以您想要的方式同時運行,但您可能必須擁有多個自托管池。 否則,它仍然會在兩個管道之間以階梯方式運行,因為它會在兩個管道之間對作業進行排隊。

我還應該提到代理取決於您是 Azure 的免費層還是私人層。

不過,該文檔應該可以為您提供一些很好的見解。 如果您運行任何測試等,請發布您的結論。

一種解決方法是通過 REST api 和 PowerShell 任務觸發 BackendEnd 管道。 您可以使用 REST API Builds - List來獲取 FrontEnd Pipeline 的詳細構建信息並檢查最新的構建狀態:

https://dev.azure.com/{organization}/{project}/_apis/build/builds?definitions={definitions}&api-version=6.0

在 YAML 中,我們可以添加一個 powershell 任務來獲取構建狀態,例如:

- task: PowerShell@2
  inputs:
   targetType : inline
   script: |
     $url = "https://dev.azure.com/{organization}/{project}/_apis/build/builds?definitions={definitionID}&api-version=6.0"
     $connectionToken="Your PAT Here"
     $base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

       $buildPipeline= Invoke-RestMethod -Uri $url -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get


       $BuildStatus= $buildPipeline.value.status | Select-Object -first 1


       Write-Host This is Build Status: $BuildStatus

這列出了指定定義的所有構建狀態,然后使用Select-Object -first 1獲取最新的構建狀態。 如果狀態為completed ,則將 BackendEnd 管道排隊。 如果狀態未completed ,則不要將 BackendEnd 管道排隊。

暫無
暫無

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

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