我在Azure Devops发布管道中有3个工作:
我要配置 Agent job2 ,即使 Agent job1 失败,它也应运行。
为此,我将运行此作业的“代理作业2 ”属性设置为“ ,即使先前的作业失败。
现在,我要配置 Agent job3 ,使其仅在 Agent job2 成功
时运行我需要在Agent Job3中进行哪些配置才能使其依赖于Agent Job2
答案 0 :(得分:0)
如何限制代理作业仅在特定作业成功后才能运行
恐怕没有这样的现成自定义条件来限制代理作业仅在特定作业成功的情况下才能运行。
解决方法,我们可以在变量中将变量RunAgentJob3
设置为False
:
然后,在第二个代理作业结束时以条件when all previous tasks have succeeded
添加一个内联Powershell任务,紧接在复制任务之后调用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才会运行。
希望这会有所帮助。