我在 github 上有两个存储库,其中包含前端的代码 ne 和后端的其他代码。 我在 azure devops 中的项目中设置了 2 个 yaml CI-CD 管道,其中一个配置为触发前端存储库和后端存储库中的其他更改。 当我触发前端存储库中的任何更改时,前端管道被触发,当我触发后端存储库中的任何更改时,后端管道被触发。
我已经设置了多阶段 yaml 管道,例如:构建-> 部署-> 在两个管道中运行测试 .当我同时触发两个管道时,一个管道排队等待,直到第一个管道的第一阶段完成,然后触发第二个管道的第一个阶段,然后触发第一个管道的第二个阶段,然后触发第二个管道的第二个阶段。我想避免这件事。
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
同时单独触发,以便两个管道都执行自己的阶段。这是如何实现的。
答案 0 :(得分:0)
不幸的是,我很确定这种类型的功能取决于您愿意支付多少。在我的组织中,我们为 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 的免费层还是私有层。
该文档应该可以为您提供一些很好的见解。如果您运行任何测试等,请发布您的结论。
答案 1 :(得分:0)
一种解决方法是通过 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 排队
管道。