我在 Azure Devops Release Pipeline 中有 3 个工作:
- 代理工作1
- 代理工作2
- 代理工作3
我想以这样一种方式配置代理作业2,即使代理作业 1失败,它也应该运行。
为此,我已将Run this job的Agent job2属性设置为even if the previous job failed。
现在,我想配置代理 job3,使其仅在代理 job2成功时才运行
我需要在代理 Job3 中进行什么配置以使其依赖于代理 Job2
我在 Azure Devops Release Pipeline 中有 3 个工作:
我想以这样一种方式配置代理作业2,即使代理作业 1失败,它也应该运行。
为此,我已将Run this job的Agent job2属性设置为even if the previous job failed。
现在,我想配置代理 job3,使其仅在代理 job2成功时才运行
我需要在代理 Job3 中进行什么配置以使其依赖于代理 Job2
仅在特定作业成功时如何限制代理作业运行
恐怕没有这种开箱即用的自定义条件来限制代理作业仅在特定作业成功时才运行。
作为解决方法,我们可以在变量中设置一个RunAgentJob3
变量False
:
然后,在您的第二个代理作业结束时添加一个内联 powershell 任务,条件为 Only when all previous tasks have succeeded
,就在复制任务之后调用 REST API 以更新变量RunAgentJob3
,true
例如:
$url = "https://dev.azure.com/<OrganizationName>/<ProjectName>/_apis/build/definitions/55?api-version=5.0"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
# Update an existing variable named RunAgentJob3to its new value true
$pipeline.variables.RunAgentJob3.value = "true"
####****************** update the modified object **************************
$json = @($pipeline) | ConvertTo-Json -Depth 99
$updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}
参考:定义 - 更新
在 Agent Job3 中,将自定义条件设置为:
eq(variables['RunAgentJob3'],'true')
现在,只有当代理 Job2 成功时,代理 Job3 才会运行。
希望这可以帮助。