仅在特定作业成功后如何限制代理作业运行

时间:2019-12-17 08:45:59

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline azure-devops-self-hosted-agent

我在Azure Devops发布管道中有3个工作:

  • 代理人工作1
  • 代理人工作2
  • 代理人职位3

我要配置 Agent job2 ,即使 Agent job1 失败,它也应运行。

为此,我将运行此作业的“代理作业2 ”属性设置为“ ,即使先前的作业失败

现在,我要配置 Agent job3 ,使其仅在 Agent job2 成功

时运行

enter image description here

我需要在Agent Job3中进行哪些配置才能使其依赖于Agent Job2

1 个答案:

答案 0 :(得分:0)

  

如何限制代理作业仅在特定作业成功后才能运行

恐怕没有这样的现成自定义条件来限制代理作业仅在特定作业成功的情况下才能运行。

解决方法,我们可以在变量中将变量RunAgentJob3设置为False

enter image description here

然后,在第二个代理作业结束时以条件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"}

参考:Definitions - Update

在Agent Job3中,将自定义条件设置为:

eq(variables['RunAgentJob3'],'true')

现在,只有在代理Job2成功的情况下,代理Job3才会运行。

希望这会有所帮助。