成功构建后如何自动创建构建管道标签(不是 GIT 标签)?

Dav*_*vid 12 continuous-delivery azure-devops azure-pipelines

到目前为止的故事:

  • 当我有一个想要部署的提交时,我会创建一个 GIT 标签作为构建的基础,例如“RC1”
  • GIT TAG 的创建会自动触发 PipeLine Build 开始。
  • 成功完成 PipeLine Build 后,它会在源提交上创建一个新的 GIT TAG,其中包含 BuildNumber_BuildId,以便稍后交叉引用。
  • 我还有一个发布管道,然后用于进行部署(我喜欢分离),我想过滤 Build TAG =“RC*”
  • 我可以手动创建构建标签,但是......

这就是需要帮助的地方。

我花了好几天的时间寻找一种自动创建 PipeLine Build TAG 的方法,但只找到了我已经拥有的答案。如果它是 YAML 中的步骤/任务或构建管道中的设置,我可能不会。如果有人能指出我正确的方向,我将不胜感激。

最终目标是如果构建成功,则将原始源 GIT TAG 推送到 Build TAG 中。

注意:我只在 YAML 中工作,无论什么设置都是 Azure Devops 版本 Dev18.M170.1 自带的,即没有插件。

jes*_*ing 17

如果仍处于构建阶段,您可以添加构建标签,并从脚本、bash 或 PowerShell (write-host 而不是 echo)任务运行以下命令:

echo "##vso[build.addbuildtag]My Tag"
Run Code Online (Sandbox Code Playgroud)

在 Yaml 中,最简单的语法是:

- script: |
    echo "##vso[build.addbuildtag]My Tag"
Run Code Online (Sandbox Code Playgroud)

或者对于 PowerShell,您可以使用简短语法:

steps:
- powershell: |
    $newSourceBranch = "$(Build.SourceBranch)" -replace 'refs/tags/', '' 
    $Command = "##vso[build.addbuildtag]"+$newSourceBranch 
    write-host "Create a Build TAG called $newSourceBranch" 
    write-host $Command
Run Code Online (Sandbox Code Playgroud)

  • 脚本选项不起作用,因为 YAML 将第一个哈希之后的所有内容视为注释。我必须将脚本移至下一行: - script: | <下一行> echo ##vso[build.addbuildtag]我的标签。 (2认同)

Bri*_*SFT 9

当然。构建成功后,可以使用 API“ Tags - 添加构建标签”添加标签。

如果想同时为成功构建添加多个标签,可以使用API​​“标签-添加构建标签”。

下面是一个向成功构建添加标签的演示。您可以引用它并在构建管道中设置相关步骤。

对于经典构建管道:

  1. 在构建作业的设置页面上 启用选项“允许脚本访问 OAuth 令牌”。在此输入图像描述

  2. 添加 PowerShell 任务作为构建作业的最后一个。

    • 选择“仅当所有先前任务都成功时运行此任务
    • 将以下脚本添加到任务中。将{organization},{project}和替换{tag}为您想要的实际组织、项目和标签。
    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Authorization", "Bearer $env:SYSTEM_ACCESSTOKEN")
    $headers.Add("Content-Type", "application/json")
    $uri = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/$(Build.BuildId)/tags/{tag}?api-version=6.0"
    Invoke-RestMethod -Uri $uri -Headers $headers -Method PUT
    
    Run Code Online (Sandbox Code Playgroud)

    在此输入图像描述

对于 YAML 构建管道:

添加一个 PowerShell 任务作为构建作业的最后一个,如下所示。将{organization},{project}和替换{tag}为您想要的实际组织、项目和标签。

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $env:SYSTEM_ACCESSTOKEN")
$headers.Add("Content-Type", "application/json")
$uri = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/$(Build.BuildId)/tags/{tag}?api-version=6.0"
Invoke-RestMethod -Uri $uri -Headers $headers -Method PUT
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述