azure-devops - 如何将参数传递给 azure Dev ops 在外部构建管道以控制任务执行?
问题描述
我的查询是如何将参数传递给 azure Dev ops 在外部构建管道以控制任务执行?要详细解释这里的解释:
我在 azure Dev ops 中有一个项目,它有一个构建管道,配置了一系列任务,包括构建解决方案、生成可部署包等。通常这会很好地执行,没有任何问题。
我想要实现的是在这个项目构建定义中声明一个管道变量,当我说它是一个完全不同的东西或像 ms flow 这样的外部应用程序时,我可以从外部访问它,这样我就可以将一个值传递给新创建的管道变量如上所述,使用存储在这个新变量中的这个值,我应该能够跳过构建管道中的几个步骤,并且我应该只能执行几个步骤。
让我用一个例子来解释:
- 考虑一个在 azure Dev ops 中名为 A 的项目,它有一个配置有 5 个不同任务的构建管道
- 在同一个构建管道中,假设创建了一个名为 flag 的新管道变量
- 考虑一个像 ms flow 这样的外部应用程序,它在步骤 1 中触发项目 A 构建管道
- 我应该能够使用第 3 步中的流程(如 true 或 false)将值传递给第 2 步中创建的标志变量。
- 使用从 ms 流传递到构建管道的标志值,应该执行构建管道中的任务,即如果通过外部应用程序到达构建管道的值是 true,那么它应该只执行构建管道中的 3、4 个任务并跳过其他 false 应该在 azure Dev ops 中执行构建管道中的所有步骤。
查询是如何实现或使这种行为发生的?
请帮我解决这个问题?
如果无法将值传递给变量,请告诉我如何实现从外部应用程序(如 ms 流)触发的 azure Dev ops 构建管道中的跳过行为?
解决方案
由于有一个 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,并且第一个管道中的所有任务将按预期运行。
推荐阅读
- haskell - 如何使用 cabal new-test 通过测试选项?
- swift - 禁止警告:复制捆绑资源构建阶段无法处理 Swift 文件
- python - 复制 S3 存储桶中嵌套文件夹中的文件
- oracle-adf - 在 jdeveloper 中运行 ant 时包 oracle.jbo.server 不存在
- matlab - 对齐直方图
- tabulator - 无法让 Tabulator 呈现表格版本 4
- lua - 从表中获取所有数据名称
- javascript - 内部运行基本 Javascript 的 Html 文件不会在 ipad 上加载
- delphi - GetWindowThreadProcessId() IAT 挂钩:如何比较“dwProcessID”参数?
- apache-kafka - 何时应该将 Kafka Streams 应用程序拆分为多个应用程序?