如何从外部将参数传递给Azure Dev ops构建管道以控制任务执行?

时间:2019-09-26 16:27:20

标签: azure-devops azure-pipelines

我的查询是 如何从外部将参数传递给Azure Dev ops构建管道以控制任务执行? 为了在这里详细解释,解释:

我在Azure Dev ops中有一个项目,该项目的构建管道配置了一系列任务,涉及构建解决方案,生成可部署的程序包等。通常,此过程执行得很好,没有任何问题。

我要实现的是在此项目构建定义中声明一个管道变量,当我说它是某种完全不同的事物或诸如ms flow之类的外部应用程序时,可以从外部访问它,以便我可以将值传递给新创建如上所述的管道变量,并使用存储在此新变量中的该值,我应该能够跳过构建管道中的几个步骤,并且我应该只能执行几个步骤。

让我举例说明:

  1. 在azure Dev ops中考虑一个名为A的项目,该项目的构建管道配置了5个不同的任务
  2. 在同一构建管道中,假设创建了一个新管道变量,称为flag
  3. 考虑一个类似于ms flow的外部应用程序,该应用程序将在步骤1中触发项目A构建管道。
  4. 我应该能够使用第3步中的流程将值传递给在第2步中创建的标志变量,如true或false。
  5. 使用从ms流传递到构建管道的标志值,应执行构建管道中的任务,即,如果通过外部应用程序到达构建管道的值是true,则它应仅在构建中执行3、4个任务管道并跳过其他错误项,应在Azure开发运营中执行构建管道中的所有步骤。

查询是如何实现或使这种行为发生?

请帮我解决这个问题?

如果无法将值传递给变量,能否让我知道如何在由外部流(如ms flow)触发的Azure开发操作构建管道中实现跳过行为?

2 个答案:

答案 0 :(得分:1)

由于有一个REST API可以在构建队列时传递参数,并且您可以在构建管道中指定自定义条件,因此有一种解决方法。 根据REST API文档,您可以将其转换为Powershell脚本,如下所示。

Param(
       [string]$collectionurl = "https://dev.azure.com/{orgname}",
       [string]$project = "{projectname}",
       [string]$user = "{useraccount}",
       [string]$token = "{yourPAT}"
)

$base64AuthInfo= [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $token)))

$defurl = "$collectionurl/$project/_apis/build/builds?api-version=5.0"
$json = '{"parameters":  "{\"AnotherParameter\":  \"true\"}","definition":  {"id":  "{definitionId}"}}'
$updatedef = Invoke-RestMethod -Uri $defurl -Method Post -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

您可以创建三个构建管道。第一个管道是您的主要管道,它具有5个不同的任务。您可以如下设置自定义条件。这意味着,只有当AnotherParameter的值为true时,任务才会运行。

enter image description here

第二个管道和第三个管道是触发管道。在第二个管道中,可以使用powershell脚本将AnotherParameter设置为false,在第三个管道中,将该值设置为true。

然后设置第二条管道是由外部应用程序触发的,而第三条管道是由您的仓库或其他人触发的。

当外部应用程序触发第二个管道时,AnotherParameter的值将为false,并且第一个管道中的某些任务将不会运行。

当您的提交触发了第三个管道时,AnotherParameter的值为true,并且第一个管道中的所有任务将按预期运行。

答案 1 :(得分:0)

您可以调用Azure DevOps REST API并在请求中传递参数。 看看这篇文章以了解更多信息: Start a build and passing variables through VSTS Rest API

如果要向任务或构建管道中添加条件,请查看文档以了解条件:Conditions - Azure Pipelines