通过Azure DevOps Rest API启动构建并传递变量

15

我想通过REST API启动Azure Pipelines构建。有一个API用于排队构建,但是我找不到定义变量的方法。

5个回答

38

当您需要在队列时间设置值时,被接受的答案并没有真正回答问题。解决方案实际上非常简单,您只需向json有效负载添加一个parameters字段即可。内容应该是一个JSON字符串(不是直接的对象),其中包含参数。 例如:

{
    "parameters":  "{\"ReleaseNumber\":  \"1.0.50\", \"AnotherParameter\":  \"a value\"}",
    "definition":  {
                       "id":  2
                   }
}

编辑:该功能现已被明确记录为“可选的字符串化字典”。请参见https://www.visualstudio.com/fr-fr/docs/integrate/api/build/builds#queue-a-build


3
好的!我很好奇你是怎么发现这个的,因为文档(如问题中链接的文档)似乎没有提到它。这只是一个未记录在案的功能吗? - 31eee384
1
好消息是当前门户网站使用与我们相同的REST API,因此在查找如何做某些事情时,Chrome开发者工具或Fiddler非常有帮助 :)。如果这篇回答对您有帮助,可以点赞哦;)。 - Cyprien Autexier
1
提示:当通过API启动构建时,您还可以添加“reason”字段,但请注意,尽管文档指定“buildCompletion”是其中一个字符串选项,但调用将失败。可用原因的真实列表在此处 - https://learn.microsoft.com/en-us/azure/devops/extend/reference/client/api/tfs/build/contracts/buildreason?view=azure-devops - bunkerdive
在使用 Azure DevOps 的 API 5.1 进行构建队列排队时,如果没有正确设置参数部分,将会导致失败。 - Jeff Patton

3

变量包含在定义中,您可以通过构建定义API更新构建定义以设置变量,然后排队构建。

以下是通过构建定义API获取的变量部分:

  "variables": {
    "system.debug": {
      "value": "false",
      "allowOverride": true
    },
    "BuildConfiguration": {
      "value": "release",
      "allowOverride": true
    },
    "BuildPlatform": {
      "value": "any cpu",
      "allowOverride": true
    }
  },

2
谢谢,先设置变量然后再排队可能是一个可行的解决方案。但这会在每次运行时更改构建定义并且混乱历史记录。由于可以在UI中排队构建时设置变量,如果REST API也具有相同的功能将是很好的。 - Pascal Berger
传递变量对我来说似乎并没有像广告中宣传的那样有效。 - Jeff Patton
如果您想连续调用此API多次,使用此选项可能效果不佳,因为在调用队列构建之前,您可能无法将其保存。我需要连续调用它50次,并每次使用不同的参数。因此,即使它不太美观,我也会使用被接受的答案。 - PHPGuru

1

对于任何寻找此内容的人,我能够使用'templateParameters'使其在7.1版本中工作,它允许您发送一个Object而不是String

  • 方法:POST
  • 网址:https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=7.1-preview.7
  • 请求体:JSON 示例:
    {
      "sourceBranch":"Development",
      "definition": {
        "id": 5
      }
      "templateParameters": {
        "PARAMETER1": "value1",
        "parameter2": "valuex"
      }
    }
    

文档:https://learn.microsoft.com/zh-cn/rest/api/azure/devops/build/builds/queue?view=azure-devops-rest-7.1


我们如何在Shell脚本中访问参数? - Jerin Joy
这对我也起作用。我之前遇到了一个问题,无法直接通过参数实现这个功能。但是通过使用TemplateParamaters,我能够通过Azure DevOps的REST API版本7.0将参数传递给另一个流水线,并将其排队。 - Sowmya

1

0

看起来它可以在5.1版本中使用。您需要做的就是将传递给管道的变量定义为管道变量中的参数,并确保选中“可在队列时间设置”复选框。如果您在任何库中具有相同的变量,请确保删除这些引用,因为库变量被视为覆盖通过API设置的变量。

请注意,我使用的是Azure Devops Server 2019

API: https://learn.microsoft.com/en-us/rest/api/azure/devops/build/builds/queue?view=azure-devops-rest-5.1

导航到设置变量:编辑YAML管道-->单击“运行”按钮附近的3个点-->变量-->变量选项卡

希望对某人有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接