有什么方法可以在发布管道中获取任务名称,以根据条件执行特定任务

高拉夫·乔希

我正在开发一个发布管道,在1个代理中大约有3个任务。taskA,taskB,taskC我想基于特定任务运行特定任务失败。我尝试了自定义条件,但没有满足我的要求。我也希望仅当任务B失败时才能执行任务C,因为我也正在使用输出变量。在这种情况下,它仅适用于taskB。当TaskA失败时,任务B将跳过,并且输出变量为null,在这种情况下,我的任务C正在执行,这是不正确的。

我正在尝试同时满足TaskA和TaskB条件的条件。

  1. 如果TaskA失败-> TaskC不应该运行
  2. 如果TaskB失败-> TaskC应该运行。

这是我的条件:-> and(eq(Agent.JobStatus,'failed'),in(variables ['oneboxout.oneboxvar'],'False'))有什么办法只能获取任务名称,所以我的工作容易些。

以下是我的任务屏幕截图,供您参考。

在此处输入图片说明

刘o

有什么办法可以让我们只获得任务名称,这样我的工作就会更轻松。

答案是肯定的。

我们可以使用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。

要解决此请求,我想使用以下方法:

概要:

  1. Get JobB task result在两者之间添加powershell一个任务(让我们来调用它),JobBJobC调用REST API以获取JobB with条件 的结果Even if a previous task has failed, unless the build was canceled
  2. RunJobC根据JobB上述powershell任务中的任务结果,为变量设置不同的值
  3. 设置条件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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以在我的Azure DevOps构建管道“发布工件”任务中有条件地设置工件名称?

Azure 管道根据条件设置任务的显示名称

有什么更好的方法可以从rake任务中执行几个系统命令?

有什么方法可以获取Google Cloud任务状态?

有什么方法可以知道 BlockingCollection 中的所有任务何时完成执行?(任务将在启动时被删除,但我想知道 exec 是否完成)

除了react-native-background-task之外,还有什么方法可以在React Native中执行后台任务?

如何检查列表中是否有特定内容并根据列表中找到的内容执行任务?

AzureDevOps-发布管道中的缓存任务

检查这些条件是否适用并执行一组任务的有效方法是什么?

为什么可以在gradle任务的名称中忽略引号

SQL Server部署任务的Azure Devops发布管道中的警告:“从模块'SqlPS'导入的某些命令的名称...”

有什么方法可以非暴力地停止芹菜工作者的特定任务?

“包或文件夹”在发布管道中的文件转换任务中指的是什么?

如何从Laravel的同一张表中获取具有父任务名称的任务数据

条件变量的 .wait_for() 是在特定时间间隔执行后台任务的有效方法吗?

查询SharePoint搜索以从具有特定名称的创建者为A或B的列表中获取所有任务

有什么方法可以找到未等待的任务?

有什么方法可以通过任务管理器找到在Java中运行的线程数吗?

为什么有两种方法可以在Gradle中创建任务?

有什么方法可以使Windows 10中的任务栏图标更大?

有什么方法可以隐藏任务栏标签而不合并任务栏按钮?

如何在任务中获取任务名称

在Ant中无条件执行任务?

SSIS中的条件执行SQL任务

我如何在msbuild任务中获取发布配置文件名称?

有条件的SSIS-根据结果执行一项或多项任务

是否可以从 doLast 中执行任务?

UWP中可以执行哪些任务

有没有一种方法可以知道由ThreadPool中的活动线程执行的任务?