Azure devops 通过带有队列时间变量的RESTAPI运行Azure DevOps管道

Azure devops 通过带有队列时间变量的RESTAPI运行Azure DevOps管道,azure-devops,azure-pipelines,azure-devops-rest-api,Azure Devops,Azure Pipelines,Azure Devops Rest Api,我有一个带有一组输入变量的Azure DevOps管道,这些变量应该在队列时间内修改。根据和,如果管道变量的值将在管道队列期间更改,则不能在管道YAML定义中定义它们,而是使用“触发”页面中的“UI变量”面板和“变量”选项卡 如果我要用触发我的管道,定义它们的正确方法是什么,或者我需要这样做吗?我是否也应该使用Variables选项卡预先定义它们,然后覆盖REST请求负载中的值?您肯定不需要定义触发器,因为变量是-您需要定义它们才能设置它们 定义它们的正确方法是什么?或者我需要这样做吗?我是否也

我有一个带有一组输入变量的Azure DevOps管道,这些变量应该在队列时间内修改。根据和,如果管道变量的值将在管道队列期间更改,则不能在管道YAML定义中定义它们,而是使用“触发”页面中的“UI变量”面板和“变量”选项卡


如果我要用触发我的管道,定义它们的正确方法是什么,或者我需要这样做吗?我是否也应该使用Variables选项卡预先定义它们,然后覆盖REST请求负载中的值?

您肯定不需要定义触发器,因为变量是-您需要定义它们才能设置它们

定义它们的正确方法是什么?或者我需要这样做吗?我是否也应该使用Variables选项卡预先定义它们,并在REST请求负载中稍后重写这些值

您可以通过参数直接调用带有队列时间变量的RESTAPI

缔约国:

如果管道变量的值将在管道队列期间更改, 它们不能在管道YAML定义中定义,而是使用UI “变量”面板和“触发器”页面中的“变量”选项卡

这意味着,当您在YMAL文件中定义变量时,您无法在对管道排队时对其进行修改,但如果您在UI中定义了该变量,则可以使用队列时间变量对其进行修改

然而,我们仍然可以通过带有队列时间变量的RESTAPI以YAML类型运行Azure DevOps管道

作为测试,我创建了一个YAML类型的管道,如下所示,在YAML或UI中没有任何预定义变量:

pool:
  vmImage: 'ubuntu-latest'

trigger: 
 branches:
  include:
    - mster

steps:
- script: echo $(Test)
  displayName: 'Do something'
然后,我将REST API与以下请求体一起使用:

{
    "parameters": "{\"Test\":\"123\"}",

    "definition":  {
                       "id":  66
                   }
}
与rest一样,将触发管道,输出为:


希望这能有所帮助。

在撰写本文时,我相信Microsoft文档是关于这个主题的最新版本。我确实需要挠头才能让它工作,但最终还是用了这个代码。我的管道不像OP中的问题那样使用变量,但它们的工作原理与参数相同

公共静态异步任务InitiatePlineCancellationToken cancellationToken=默认值 { usingHttpClient客户端=新HttpClient { client.DefaultRequestHeaders.Accept.Clear; client.DefaultRequestHeaders.Accept.Addnew MediaTypeWithQualityHeaderValueapplication/json; var token=Convert.ToBase64StringSystem.Text.asciientoding.ASCII.getbytestring.Format{0}:{1},AppSettings.devopstat; client.DefaultRequestHeaders.Authorization=新身份验证HeaderValueBasic,令牌; var repoGuid=Put GUID Here;//在Repos is项目设置下选择感兴趣的rpo时,可以从URL获取repo的GUID var bodyJson=@{ 参数:{ parameterName:parameterValue }, 变量:{}, 资源:{ 存储库:{ 自我:{ 存储库:{ id:+repoGuid+@, 类型:azureReposGit }, refName:refs/heads/master } } } }; var bodyContent=new-StringContentbodyJson,Encoding.UTF8,application/json; var pipeLineId=61;//当您在Azure DevOps中打开感兴趣的管道时,可以从URL获取此信息 var response=wait client.PostAsync$https://dev.azure.com/ORG_NAME/PROJECT_NAME/_apis/pipelines/{pipeLineId}/runs?api版本=6.0-preview.1,bodyContent,cancellationToken; response.EnsureAccessStatusCode; } }
这回答了你的问题吗@感谢您的指点,这是一篇关于如何使用REST API调用管道的有用文章,但我看不到任何关于如何在管道排队之前提前定义变量的说明。您应该在排队时使用settable定义变量,在上面的回答中,您可以看到如何在使用rest api排队构建时输入值。非常感谢。这正是我问题的答案。@easkerov,这是我的荣幸:。谢谢你的回答。然而,对我来说,这并不能完全解决这个问题,因为当从gui手动触发构建时,它似乎不起作用。我在这里评论;在手动触发构建时,使用rest api以及gui参数化的解决方案上。