Azure Pipeline如何获取构建关联的Git TAG并存入yml变量?
Azure Pipeline 捕获构建关联Git TAG的实现方法
场景1:构建流水线内直接获取
如果你的TAG捕获操作是在构建流水线(Build Pipeline)中执行,且构建是由Git TAG推送触发的,可直接使用内置变量:
- 内置变量
Build.SourceBranch会返回完整的TAG引用路径,格式为refs/tags/[TAG名称] - 内置变量
Build.SourceBranchName会直接返回TAG的名称,无需额外截取
场景2:发布流水线(Release Pipeline)中获取关联构建的TAG
这是你当前的使用场景,需要调用Azure DevOps REST API实现,步骤如下:
- 先配置代理作业权限:在发布流水线的对应代理作业设置中,开启允许脚本访问OAuth令牌选项,后续任务可直接使用内置变量
System.AccessToken完成鉴权。 - 添加PowerShell任务(Linux环境可替换为Bash任务),插入如下代码:
# 替换为你自己的组织名、项目名 $orgName = "你的组织名称" $projectName = "你的项目名称" $buildId = $(RELEASE.ARTIFACTS.MyPipeline_BUILDID) $apiUrl = "https://dev.azure.com/$orgName/$projectName/_apis/build/builds/$buildId?api-version=7.0" # 调用API获取构建详情 $response = Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization = "Bearer $(System.AccessToken)"} -Method Get # 提取TAG名称 $sourceBranch = $response.sourceBranch if ($sourceBranch -like "refs/tags/*") { $gitTag = $sourceBranch.Replace("refs/tags/", "") } else { $gitTag = "无关联TAG" } # 设置为流水线全局变量,后续所有任务都可以调用$(GitTag) Write-Host "##vso[task.setvariable variable=GitTag;]$gitTag"
- 后续任务中直接使用
$(GitTag)即可进行字符串拼接等操作。
注意:如果关联的构建不是由TAG触发的,
sourceBranch会返回对应分支路径(如refs/heads/main),可根据你的业务需求调整上述判断逻辑。
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

