gpt4 book ai didi

azure-devops - Azure DevOps YAML 管道参数不适用于 REST API 触发器

转载 作者:行者123 更新时间:2023-12-04 11:07:46 24 4
gpt4 key购买 nike

我正在尝试创建一个基于 YAML 的管道,该管道采用一个参数,然后触发管道从 Azure DevOps REST API 运行。我能够看到构建已排队,但参数并未从我的 POST 正文中覆盖。

我的模板 my-template.yaml .

parameters:
- name: testParam
type: string
default: 'N/A'


steps:
- script: echo ${{ parameters.testParam }}

我的管道 yaml 扩展了模板。

trigger:
- master

extends:
template: my-template.yaml


然后我使用 queue build 触发这个管道REST API: https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=5.1带有如下 POST 正文。
{
"parameters": "{\"testParam\": \"hello world\"}",
"definition": {
"id": 50642
},
"sourceBranch": "refs/heads/master"
}


所以我期待管道执行会回显 hello world而不是 N/A .不幸的是,我仍然看到 N/A在管道结果中。

任何人都知道发生了什么?我错过了什么吗?

最佳答案

我遇到了完全相同的问题 - 一个管道采用运行时参数,在通过 UI 运行时起作用,但不是通过 Queue Build REST API .

我能够通过使用未记录的 API 解决此问题,该 API 与运行管道时 Az DevOps Pipelines UI 调用的 API 完全相同:
https://dev.azure.com/{organization}/{project}/_apis/pipelines/{pipelineId}/runs?api-version=5.1-preview
使用以下 POST 正文:

{
"stagesToSkip": [],
"resources": {
"repositories": {
"self": {
"refName": "refs/heads/master"
}
}
},
"templateParameters": {
"testParam": "hello world"
},
"variables": {}
}

请注意,使用此 API,您的运行时参数将作为实际 JSON 提交,而不是字符串化 JSON,并在 key templateParameters 下提交。 .

同样,不要忘记包含此调用可能期望的标准 header :
  • Content-Type: application/json
  • Accept: application/json
  • AUTHORIZATION: bearer $SYSTEM_ACCESSTOKEN .

  • 使用这种方法,在被调用的管道中,您将始终能够访问 ${{ parameters.testParam }} 的值。管道是通过 REST API 调用还是在 UI 中手动调用。

    虽然您认为该值可以作为 $(testParam) 访问是正确的当通过 REST API 执行时,在 UI 中运行管道时不会填充该变量。

    因此,我建议使用这个未记录的 API,因为被调用的管道可以使用 ${{ parameters.testParam }}不管它是如何被调用的。当然,它(在写作时)没有记录,所以....¯_(ツ)_/¯

    同样,应该注意的是,您的管道必须按照@Josh Gust 建议的格式进行格式化:

    我的模板.yaml:
    parameters:
    - name: testParam
    type: string
    default: 'N/A'
    steps:
    - script: echo ${{ parameters.testParam }}

    azure-pipelines.yaml:
    parameters:
    - name: testParam
    type: string
    default: 'N/A'
    trigger:
    - master
    extends:
    template: my-template.yaml
    parameters:
    testParam: ${{ parameters.testParam }}

    关于azure-devops - Azure DevOps YAML 管道参数不适用于 REST API 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60852825/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com