我的查询是 如何从外部将参数传递给Azure Dev ops构建管道以控制任务执行? 为了在这里详细解释,解释:
我在Azure Dev ops中有一个项目,该项目的构建管道配置了一系列任务,涉及构建解决方案,生成可部署的程序包等。通常,此过程执行得很好,没有任何问题。
我要实现的是在此项目构建定义中声明一个管道变量,当我说它是某种完全不同的事物或诸如ms flow之类的外部应用程序时,可以从外部访问它,以便我可以将值传递给新创建如上所述的管道变量,并使用存储在此新变量中的该值,我应该能够跳过构建管道中的几个步骤,并且我应该只能执行几个步骤。
让我举例说明:
查询是如何实现或使这种行为发生?
请帮我解决这个问题?
如果无法将值传递给变量,能否让我知道如何在由外部流(如ms flow)触发的Azure开发操作构建管道中实现跳过行为?
答案 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时,任务才会运行。
第二个管道和第三个管道是触发管道。在第二个管道中,可以使用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