我正在开发一个发布管道,在1个代理中大约有3个任务。taskA,taskB,taskC我想基于特定任务运行特定任务失败。我尝试了自定义条件,但没有满足我的要求。我也希望仅当任务B失败时才能执行任务C,因为我也正在使用输出变量。在这种情况下,它仅适用于taskB。当TaskA失败时,任务B将跳过,并且输出变量为null,在这种情况下,我的任务C正在执行,这是不正确的。
我正在尝试同时满足TaskA和TaskB条件的条件。
这是我的条件:-> and(eq(Agent.JobStatus,'failed'),in(variables ['oneboxout.oneboxvar'],'False'))有什么办法只能获取任务名称,所以我的工作容易些。
以下是我的任务屏幕截图,供您参考。
有什么办法可以让我们只获得任务名称,这样我的工作就会更轻松。
答案是肯定的。
我们可以使用REST API版本-获取版本来获取任务名称或状态;
https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/get%20release?view=azure-devops-rest-6.0
作为上述REST API,我们需要向该REST API提供当前版本ID。要解决此问题,我们可以使用REST API Releases-带参数的列表definitionId={definitionId}
和powershell参数Select-Object -first 1
来获取当前版本ID。
要解决此请求,我想使用以下方法:
概要:
Get JobB task result
在两者之间添加powershell一个任务(让我们来调用它),JobB
并JobC
调用REST API以获取JobB
with条件 的结果Even if a previous task has failed, unless the build was canceled
。RunJobC
根据JobB
上述powershell任务中的任务结果,为变量设置不同的值。and(always(), eq(variables['RunJobC'], 'True'))
的JobC
。我的测试脚本(Allow scripts to access the OAuth token
“阶段”中的“检查”选项):
$url = "https://vsrm.dev.azure.com/M<YourOrganization>/<YourProject>/_apis/release/releases?definitionId=24&api-version=6.0"
$RealeasePipeline= Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method Get
$ReleaseId= $RealeasePipeline.value.id | Select-Object -first 1
Write-Host The current Release Id: $ReleaseId
$url2 = "https://vsrm.dev.azure.com/<YourOrganization>/<YourProject>/_apis/release/releases/$($ReleaseId)?api-version=6.0"
$ReleaseInfo= Invoke-RestMethod -Uri $url2 -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method Get
$TargetTask=$ReleaseInfo.environments.deploySteps.releaseDeployPhases.deploymentJobs.tasks| where { $_.Name -eq "JobB"}
Write-Host JobB task Result is: $TargetTask.status
if ($TargetTask.status -eq "succeeded"){
Write-Host ("##vso[task.setvariable variable=RunJobC]False")
}elseif($TargetTask.status -eq "Failed"){
Write-Host ("##vso[task.setvariable variable=RunJobC]True")
}
我的测试结果:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句