Azure DevOps Pipeline中PowerShell设置含+号Build Tag失败咨询
Azure DevOps YAML Pipeline中含+号的Build Tag设置问题解决办法
你在PowerShell脚本中通过##vso[build.addbuildtag]$Version添加版本标签0.0.1+时执行失败,报错##[error]Not Found,但手动在GUI中可正常添加该标签。核心原因是+号属于Azure DevOps日志命令的特殊字符,会被自动解析,导致标签内容异常。
解决办法
方案1:对+号进行URL编码
将版本字符串中的+替换为URL编码值%2B,绕过日志命令的字符解析逻辑,脚本修改如下:
$encodedVersion = $Version.Replace("+", "%2B") Write-Host "Version: $Version" Write-Host "##vso[build.addbuildtag]$encodedVersion"
执行后,Azure DevOps会自动将编码后的%2B还原为+,最终添加的标签即为0.0.1+。
方案2:调用Azure DevOps REST API添加标签
如果编码方式不生效,可直接调用REST API添加标签,完全避开日志命令的字符限制。示例脚本如下:
$organization = "你的组织名称" $project = "你的项目名称" $buildId = $Env:BUILD_BUILDID $versionTag = $Version # 使用Pipeline系统提供的访问令牌 $accessToken = $Env:SYSTEM_ACCESSTOKEN # 构造API请求地址 $apiUrl = "https://dev.azure.com/$organization/$project/_apis/build/builds/$buildId/tags/$versionTag`?api-version=7.1-preview.3" # 发送PUT请求添加标签 Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization = "Bearer $accessToken"} -Method Put -ContentType "application/json"
同时需要在YAML步骤中注入系统令牌权限,示例YAML片段:
- task: PowerShell@2 inputs: targetType: 'inline' script: | # 上述REST API脚本内容 env: SYSTEM_ACCESSTOKEN: $(System.AccessToken)
内容的提问来源于stack exchange,提问作者BavoDenys
相关产品推荐
相关产品推荐

