我的查询是
如何将参数传递给外部的azure Dev ops构建管道来控制任务执行?
详细解释如下:
我在 azure Dev ops 中有一个项目,它有一个构建管道,配置了一系列任务,涉及构建解决方案、生成可部署包等。通常,这会执行得很好,没有任何问题。
我想要实现的是在这个项目构建定义中声明一个管道变量,当我说它是完全不同的或像 ms flow 这样的外部应用程序时,我可以从外部访问它,以便我可以将值传递给新创建的管道变量如上所述,并使用存储在这个新变量中的值,我应该能够跳过构建管道中的几个步骤,并且应该能够仅执行几个步骤。
让我用一个例子来解释一下:
- 考虑 azure Dev ops 中名为 A 的项目,该项目有一个配置了 5 个不同任务的构建管道
- 在同一个构建管道中,假设创建了一个名为 flag 的新管道变量
- 考虑像 ms flow 这样的外部应用程序,它会在步骤 1 中触发项目 A 构建管道
- 我应该能够使用第三步中的流程将值传递给步骤 2 中创建的标志变量,如 true 或 false。
- 使用从 ms flow 传递到构建管道的标志值,应该执行构建管道中的任务,即,如果通过外部应用程序传递到构建管道的值是 true,那么它应该只执行构建管道中的 3、4 个任务并跳过其他 false 应该执行 azure Dev ops 中构建管道中的所有步骤。
问题是如何实现或使这种行为发生?
请帮我解决这个问题吗?
如果无法将值传递给变量,您能否让我知道如何从外部应用程序(如 ms flow)实现 azure Devops 构建管道触发器的跳过行为?
由于 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。
然后设置第二个管道由外部应用程序触发,第三个管道由您的存储库或其他人触发。
当外部应用程序触发第二个管道时,另一个参数的值为 false,并且第一个管道中的某些任务将不会运行。
当您的提交触发第三个管道时,另一个参数的值将为 true,并且第一个管道中的所有任务将按预期运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)