【问题标题】:Add tags to repository in Azure DevOps在 Azure DevOps 中向存储库添加标签
【发布时间】:2025-12-19 11:30:12
【问题描述】:

我是 Azure DevOps 的新手。我需要将标签添加到存储库,并且在构建执行时它应该从 txt 文件中读取标签名称并相应地创建。

【问题讨论】:

  • 只是为了澄清一些事情-通过标签,您是指git tags 还是您在工作流程中使用的其他一些特定/自定义标签?提到.txt文件的部分让我很困惑。
  • 在构建成功时在 Azure DevOps 中添加标签。默认情况下,它会将标签名称作为 $(build.buildNumber),在这里我想将标签名称添加为 txt 文件中提到的自定义名称。例如,我在我的 txt 文件中提到了标签名称为 1.2.3。因此,在构建成功完成期间,它应该为该成功构建创建标签为 1.2.3。希望现在很清楚。
  • 我尝试使用Powershell,构建成功,但是构建标签没有被创建。也没有问题,不确定标签没有被创建的原因。跨度>
  • 嗨@Dinaa根据您的问题标题,您需要将标签添加到存储库而不是构建。我共享的 API 将标记您的 git 存储库而不是构建本身。对于标记构建,您应该使用 LJ 的 Rest API。建议。希望清楚。

标签: azure-devops tags


【解决方案1】:

During the build successful completion, it should create the tag for that successful build.

我认为自动创建标签的最简单方法是使用Tags REST API

这背后的想法是在成功构建结束时添加一个额外的脚本,该脚本调用 API 并创建必要的标签。

脚本可能类似于:

- script: |
    export TAG_NAME="$(cat tag-file.txt)" ##Somehow export the tag name as env variable
    export ORGANIZATION="organization_name" ##If you use variable groups, you can add it there and skip this line.
    curl -d "" -H "Content-Type: application/json" -H "Authorization: Basic $(PERONSAL_ACCESS_TOKEN)" \
     -X PUT https://dev.azure.com/$(ORGANIZATION)/$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/tags/$(TAG_NAME)?api-version=6.0
  condition: succeeded()

您可以按照THIS 的说明创建个人访问令牌。在使用此令牌调用 REST API 之前,您必须将其转换为 Base64 字符串。为此,您可以使用THIS 脚本。

【讨论】:

  • 在哪个任务下可以添加上面的yaml脚本。由于我在任务组中找不到 yaml 的任务。
  • 任务在这种情况下等于- script,将是Command Line Script。但我认为其中任何一个都应该有效:Command Line ScriptBashPowerShell。另外,请查看 PatrickLu 的答案,在这种情况下它可能更适合您。
【解决方案2】:

LJ。分享了使用 YAML 管道的解决方案。您可以直接将该部分添加到您的xx.yml 文件中。

根据您的描述,您似乎使用的是经典 UI 编辑器。

然后您可以使用Bash taskPowerShell task 来调用您的脚本。

此外,Rest API 正在向构建中添加标签。

因为你只是想标记一个 repo,你可以直接使用 git 命令代替。

然后您需要授予Project Collection Build Service 创建标签贡献(添加/删除文件)权限。

详细样品请参考git commit and git tag in azure devops yml based pipeline

【讨论】:

    【解决方案3】:

    这是一个创建带注释的 Git 标记的示例 YAML 管道任务。
    与调用git tag 命令相比,我看到的主要好处是您的管道不需要Contribute 权限。拥有Create Tag 权限就足够了。

    - task: PowerShell@2
      displayName: Create Git Tag using inline script
      env: 
        SYSTEM_ACCESSTOKEN: $(System.AccessToken) # enables you to use the $(System.AccessToken) to authenticate the REST call
      inputs:
        targetType: 'inline'
        script: |
          $rootUrl = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI$env:SYSTEM_TEAMPROJECTID/_apis"
          $authorizationHeader =  @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
    
          $message = "YOUR GIT TAG MESSAGE" # TODO: set your message
          $body = "{ `"name`": `"$Env:BUILD_BUILDNUMBER`", `"taggedObject`": { `"objectId`": `"$Env:BUILD_SOURCEVERSION`" }, `"message`": `"$message`" }"
          $createTagUrl = "$rootUrl/git/repositories/$($env:Build_Repository_Name)/annotatedtags?api-version=6.0" # api-version=6.0 may change in the future!
          $createTagResponse = Invoke-RestMethod -Uri $createTagUrl -Method POST -Headers $authorizationHeader -Body $Body -ContentType application/json
          if ($createTagResponse -ne $Null) 
          {
              Write-Host $createTagResponse
              Write-Host "Git Tag Created!"
          }
        failOnStderr: true
    

    【讨论】:

      最近更新 更多