You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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逻辑存在两个问题:

  1. 比较逻辑错误:需要判断的是小于10而非小于等于10,且赋值应为补前导零(如05)而非直接设为0
  2. 执行位置错误:这种Shell条件判断无法直接写在env字段中,必须放在script块内执行

内容的提问来源于stack exchange,提问作者Priya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:25:39