Azure devops 如何在外部将参数传递给azure开发人员ops构建管道以控制任务的执行?

Azure devops 如何在外部将参数传递给azure开发人员ops构建管道以控制任务的执行?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我的问题是 如何在外部将参数传递给azure开发人员ops构建管道以控制任务的执行? 详细解释如下: 我在azure开发运营中有一个项目,它有一个构建管道,配置了一系列任务,包括构建解决方案、生成可部署包等。通常,这会得到很好的执行,没有任何问题 我想要实现的是在这个项目构建定义中声明一个管道变量,当我说它像一个完全不同的或者像ms flow这样的外部应用程序时,我可以从外部访问它,这样我就可以如上所述将一个值传递给新创建的管道变量,并使用存储在这个新变量中的这个值应该能够跳过构建管道中的几个步

我的问题是 如何在外部将参数传递给azure开发人员ops构建管道以控制任务的执行? 详细解释如下:

我在azure开发运营中有一个项目,它有一个构建管道,配置了一系列任务,包括构建解决方案、生成可部署包等。通常,这会得到很好的执行,没有任何问题

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

让我举例说明:

  • 考虑一个名为a in azure Dev ops的项目,该项目的构建管道配置了5个不同的任务
  • 在同一个构建管道中,假设创建了一个名为flag的新管道变量
  • 考虑像ms flow这样的外部应用程序,它在步骤1中触发项目构建管道
  • 我应该能够使用第三步中的流(如true或false)将值传递给步骤2中装箱的标志变量
  • 使用从ms flow传递到构建管道的标志值,应执行构建管道中的任务,即,如果通过外部应用程序传递到构建管道的值为真,则应仅执行3,构建管道中的4个任务和跳过false的其他任务应在azure Dev ops中执行构建管道中的所有步骤 问题是如何实现或使这种行为发生

    请帮我解决这个问题好吗


    如果无法将值传递给变量,请告诉我如何在azure Dev ops构建管道中实现从外部应用程序(如ms flow)触发的跳过行为

    您可以调用Azure DevOps REST API并在请求中传递参数。 有关更多信息,请查看此帖子:


    如果要将条件添加到任务或生成管道中,请查看条件文档:

    因为有一个REST API可以在对生成进行排队时传递参数,并且可以在生成管道中指定自定义条件,所以有一个解决方法。 根据RESTAPI文档,您可以将其转换为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个不同的任务。您可以设置自定义条件,如下所示。这意味着,只有当另一个参数的值为true时,任务才会运行

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

    然后设置第二条管道由外部应用程序触发,第三条管道由您的回购协议或其他人触发

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


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

    感谢您的输入和时间。我成功地继续前进,没有任何问题,非常感谢。解决方案已经解除了我的障碍。