如何配置GitVersion使主版本号始终为两位数字?
解决GitVersion主版本号补0为两位的Pipeline YAML实现方法
问题说明
通过Pipeline YAML结合GitVersion生成软件部件号时,需要将小于10的主版本号补前导零,确保始终为两位长度(比如主版本号5变为05,10保持10)。之前尝试的if [[ $GitVersion.Major <= 10 ]]; then GitVersion.Major=0; fi逻辑无法正确实现需求,需采用有效方案。
现有代码片段
生成controlsversion.json的步骤
displayName: "Set Controls Version Number in controlsversion.json" inputs: targetType: "inline" script: echo "$CONTROLSVERSIONNUMBER" && echo "$CONTROLSVERSIONNUMBER" >> $(Build.Repository.LocalPath)/WCSW_NA/dbt/CONFIG/controlsversion.json env: CONTROLSVERSIONNUMBER: '{ "major": "$(GitVersion.Major)", "minor": "$(GitVersion.Minor)", "patch": "$(GitVersion.Patch)","label": "$(GitVersion.PreReleaseLabel)", "version": "$(GitVersion.FullSemVer)", "branch": "$(GitVersion.EscapedBranchName)" }'
生成软件部件号的环境变量
GITVERSIONNUMBER: '{ "major": "$(GitVersion.Major)", "minor": "$(GitVersion.Minor)", "patch": "$(GitVersion.Patch)","label": "$(GitVersion.PreReleaseLabel)", "version": "$(GitVersion.FullSemVer)", "branch": "$(GitVersion.EscapedBranchName)", "build_type": "$(BUILD_TYPE)", "sw_part_number": "$(ENTITY_PREFIX)-$(QUALITY_LEVEL)-$(SOFTWARE_FAMILY)$(HARWARE)$(EQUIPMENT_FAMILY)$(GitVersion.Major)$(GitVersion.Minor)" }'
可行解决方案
方案1:通过Shell命令格式化主版本号
在Pipeline的inline脚本中,使用printf "%02d"命令对主版本号进行格式化,自动补前导零:
修改controlsversion.json生成步骤
displayName: "Set Controls Version Number in controlsversion.json" inputs: targetType: "inline" script: | # 格式化主版本号为两位,不足补0 FORMATTED_MAJOR=$(printf "%02d" $(GitVersion.Major)) # 组装JSON内容 CONTROLSVERSIONNUMBER='{ "major": "'$FORMATTED_MAJOR'", "minor": "'$(GitVersion.Minor)'", "patch": "'$(GitVersion.Patch)'","label": "'$(GitVersion.PreReleaseLabel)'", "version": "'$(GitVersion.FullSemVer)'", "branch": "'$(GitVersion.EscapedBranchName)'" }' echo "$CONTROLSVERSIONNUMBER" echo "$CONTROLSVERSIONNUMBER" >> $(Build.Repository.LocalPath)/WCSW_NA/dbt/CONFIG/controlsversion.json
修改软件部件号生成逻辑
GITVERSIONNUMBER: '{ "major": "'$(printf "%02d" $(GitVersion.Major))'", "minor": "'$(GitVersion.Minor)'", "patch": "'$(GitVersion.Patch)'","label": "'$(GitVersion.PreReleaseLabel)'", "version": "'$(GitVersion.FullSemVer)'", "branch": "'$(GitVersion.EscapedBranchName)'", "build_type": "'$(BUILD_TYPE)'", "sw_part_number": "'$(ENTITY_PREFIX)-$(QUALITY_LEVEL)-$(SOFTWARE_FAMILY)$(HARWARE)$(EQUIPMENT_FAMILY)$(printf "%02d" $(GitVersion.Major))$(GitVersion.Minor)'" }'
方案2:通过GitVersion配置文件统一格式化
在仓库根目录的GitVersion.yml中添加自定义变量,让GitVersion直接输出两位主版本号:
variables: formattedMajor: '{Major:00}'
之后在Pipeline中直接使用$(GitVersion.formattedMajor)替代$(GitVersion.Major)即可,例如:
sw_part_number: "$(ENTITY_PREFIX)-$(QUALITY_LEVEL)-$(SOFTWARE_FAMILY)$(HARWARE)$(EQUIPMENT_FAMILY)$(GitVersion.formattedMajor)$(GitVersion.Minor)"
错误尝试说明
之前的if [[ $GitVersion.Major <= 10 ]]; then GitVersion.Major=0; fi逻辑存在两个问题:
- 比较逻辑错误:需要判断的是小于10而非小于等于10,且赋值应为补前导零(如
05)而非直接设为0 - 执行位置错误:这种Shell条件判断无法直接写在
env字段中,必须放在script块内执行
内容的提问来源于stack exchange,提问作者Priya
相关产品推荐
相关产品推荐

