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

如何在Azure DevOps Pipeline的Bash任务中正确使用counter生成唯一构建号?

问题原因及解决方法

问题根源

counter('semver', 0) 是Azure DevOps的流水线表达式函数,并非Bash脚本支持的语法,直接在Bash任务中使用会触发语法错误,导致构建号缺失计数器后缀。

修正后的流水线配置

将获取版本号和生成构建号拆分为两个任务,利用Azure DevOps的表达式环境变量来正确计算计数器:

- task: Bash@3
  name: GetSemVer
  displayName: 获取语义化版本号
  inputs:
    targetType: 'inline'
    script: |
      SEMVER=$(./gradlew printVersion | grep 'Version: ' | awk -F' ' '{print $2}')
      echo "##vso[task.setvariable variable=semver;isOutput=true]$SEMVER"

- task: Bash@3
  name: SetBuildNumber
  displayName: 设置带计数器的构建号
  inputs:
    targetType: 'inline'
    script: |
      BUILDVERSION="${SEMVER}${optionalBuildTag}-${BUILD_INCREMENT}"
      echo "##vso[build.updatebuildnumber]$BUILDVERSION"
  env:
    SEMVER: $(GetSemVer.semver)
    BUILD_INCREMENT: $[counter(variables['GetSemVer.semver'], 1)]

工作原理

  1. 第一个任务:提取项目的语义化版本号,并将其设为输出变量semver。
  2. 第二个任务:
    • 通过环境变量BUILD_INCREMENT使用Azure DevOps的counter函数,以第一个任务输出的semver作为计数器的唯一标识。
    • 当semver变更时,计数器会重置为1;若semver不变,每次构建计数器自动递增1。
    • 最终组合版本号、可选标签和计数器值,更新构建号为期望格式(如1.0.0-beta.2+029.sha.16177d4-1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:45:05