Azure Pipeline YAML中通过Bash按分支条件设置构建版本问题
Azure Pipeline 构建名称设置解决方案
问题原因
你原脚本的错误在于混用了PowerShell语法和Bash语法,并且变量引用格式错误:
- Bash中无法解析
$(Build.SourceBranchName):+-$(Build.SourceBranchName)这种嵌套变量写法,触发「command not found」错误。 - 直接拼接分支名时,若分支名含特殊字符,会违反Azure Pipeline构建号的格式规则,导致构建终止。
正确实现方法
方法1:使用Bash脚本(适配Windows虚拟机)
Bash中Azure Pipeline变量以大写下划线形式存在,通过分支判断实现格式控制:
name: $(Rev:r) trigger: - main - '*' # 触发所有分支的构建 pool: vmImage: windows-2019 steps: - bash: | # 判断分支是否为main,非main分支拼接分支名 if [ "$BUILD_SOURCEBRANCHNAME" != "main" ]; then echo "##vso[build.updatebuildnumber]${BUILD_BUILDNUMBER}-${BUILD_SOURCEBRANCHNAME}" else echo "##vso[build.updatebuildnumber]${BUILD_BUILDNUMBER}" fi
方法2:使用PowerShell脚本(更适配Windows环境)
PowerShell通过环境变量引用Pipeline参数,写法更直观:
name: $(Rev:r) trigger: - main - '*' pool: vmImage: windows-2019 steps: - powershell: | if ($env:BUILD_SOURCEBRANCHNAME -ne 'main') { Write-Host "##vso[build.updatebuildnumber]$($env:BUILD_BUILDNUMBER)-$($env:BUILD_SOURCEBRANCHNAME)" } else { Write-Host "##vso[build.updatebuildnumber]$($env:BUILD_BUILDNUMBER)" }
额外注意事项
若分支名包含/、空格等特殊字符,需先做替换处理(比如把/换成-),避免违反Azure Pipeline构建号的格式规则:
示例(Bash中添加替换):
BRANCH_NAME=$(echo "$BUILD_SOURCEBRANCHNAME" | tr '/' '-') echo "##vso[build.updatebuildnumber]${BUILD_BUILDNUMBER}-${BRANCH_NAME}"
内容的提问来源于stack exchange,提问作者user3012708
相关产品推荐
相关产品推荐

