【问题标题】:Create Azure Devops/Pipeline release including all meta data like buildNumber via REST通过 REST 创建包含所有元数据(如 buildNumber)的 Azure Devops/Pipeline 版本
【发布时间】:2021-04-06 05:12:55
【问题描述】:

我知道https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/create?view=azure-devops-rest-6.0#uri-parameters,我可以通过 REST 创建版本,但是...

问题: 这些版本的问题在于,通过 REST 触发的版本缺少一些预定义变量,例如 Build.BuildNumber - 或者至少,它们并非在所有范围内都可用。

似乎Build.BuildNumberpipeline stage 中可用,但在计算发布名称格式 时却丢失了。这意味着,发布名称格式Release-$(Build.BuildNumber)($(Release.ReleaseId)) 在使用下面的有效负载创建时会以空白Build.BuildNumber 结尾。

详情:

我的 json 负载

{
  "definitionId": 9,
  "description": "Test Release",
  "artifacts": [
    {
      "alias": "My Build Artifact",
      "instanceReference": {
        "id": "6989",
        "name": null
      }
    }
  ],
  "isDraft": false,
  "reason": "none",
  "manualEnvironments": null
}

虽然artifacts.instanceReference.id 引用了一个有效的版本(当然有一个版本号) - 所以在发布阶段Build.BuildNumber 被正确填充。

我通过

发送有效载荷
curl -X POST -u username:redactedPAT -H "Content-Type: application/json" -d @payload.json https://vsrm.dev.azure.com/redactedCompany/redactedProjectId/_apis/release/releases\?api-version\=6.0

问题: 什么是创建版本的正确方法,就好像这将通过包含所有元数据的 GUI 创建一样? 我是否想念以某种方式使用 API,或者我是否需要手动设置环境变量才能使其工作(甚至以某种方式通过variables)。 由于 buildNumber 在舞台上可用,这可能是一个错误吗?

【问题讨论】:

    标签: azure-devops azure-pipelines-release-pipeline azure-devops-rest-api


    【解决方案1】:

    版本名称在编译时进行评估,这意味着它在管道任务执行之前填充。您可以查看以下解决方法来填充版本名称。

    1,您在发布名称格式中定义的$(Build.BuildNumber) 变量将检索您在请求正文中传递给artifacts instanceReferencename 属性。因此,您可以将 BuildNumber 值传递给请求正文中 instanceReference 下的 name 属性。见here

    {
      ...
      "artifacts": [
        {
          "alias": "My Build Artifact",
          "instanceReference": {
            "id": "6989",
            "name": BuildNumber #set the buildNumber here.
          }
        }
      ],
      ...
    }
    

    2,另一种解决方法是使用logging commands 在脚本任务中更新发布名称。

    您可以在发布管道阶段添加脚本任务。并在发布管道执行期间运行以下日志记录命令以更新发布名称。

    echo "##vso[release.updatereleasename]Release-$(Build.BuildNumber)($(Release.ReleaseId))"

    见下例:

    任务执行时。它将使用您想要的格式更新版本名称。

    【讨论】:

    • 在舞台上添加一个额外的步骤并不是我想要的,但是使用“名称”来设置构建名称对我有用,尽管有一个关键的“名称”感觉非常违反直觉一个版本,然后映射到版本号:)
    猜你喜欢
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2021-05-05
    • 2019-08-24
    • 1970-01-01
    • 2020-07-06
    • 2021-01-11
    • 1970-01-01
    相关资源
    最近更新 更多