如何在Azure Pipelines中按源分支递增major/minor/patch版本号?
实现Azure Pipeline按分支自动递增版本号并构建tar.gz包
可以通过Azure Pipeline的Bash任务结合分支判断逻辑实现这个需求,以下是具体的实现方案:
核心逻辑
- 从版本文件(如
version.txt)读取当前的major.minor.patch版本 - 根据触发构建的分支类型,对应递增版本段:
main分支:递增major,重置minor和patch为0Develop分支:递增minor,重置patch为0bugfix/*分支:仅递增patch
- 将新生成的版本号写入版本文件,并设置为Pipeline变量,供后续打包步骤使用
完整Pipeline YAML示例
trigger: branches: include: - main - Develop - bugfix/* pool: vmImage: 'ubuntu-latest' # Linux构建服务器 steps: # 步骤1:读取当前版本并拆分为major/minor/patch - bash: | # 读取版本文件内容(如果文件不存在,初始化为0.0.0) if [ ! -f version.txt ]; then echo "0.0.0" > version.txt fi CURRENT_VERSION=$(cat version.txt) # 拆分版本段 IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" # 根据分支判断版本递增逻辑 case "$BUILD_SOURCEBRANCHNAME" in main) MAJOR=$((MAJOR + 1)) MINOR=0 PATCH=0 ;; Develop) MINOR=$((MINOR + 1)) PATCH=0 ;; bugfix/*) PATCH=$((PATCH + 1)) ;; *) # 其他分支不修改版本,保持当前版本 echo "Unknown branch, keeping current version: $CURRENT_VERSION" ;; esac # 生成新版本号 NEW_VERSION="$MAJOR.$MINOR.$PATCH" # 将新版本写入文件(可选,用于后续版本追踪) echo "$NEW_VERSION" > version.txt # 设置Pipeline变量,供后续步骤使用 echo "##vso[task.setvariable variable=NEW_VERSION;]$NEW_VERSION" echo "Updated version from $CURRENT_VERSION to $NEW_VERSION" displayName: '自动递增版本号' # 步骤2:构建并打包tar.gz包,使用新版本号命名 - bash: | # 假设你的项目构建产物在dist目录下,根据实际路径调整 tar -czf "your-project-$NEW_VERSION.tar.gz" -C dist . displayName: '构建并打包tar.gz' # 可选步骤:将新版本文件提交回仓库(需要配置Pipeline的Git权限) - bash: | git config --global user.email "pipeline@example.com" git config --global user.name "Azure Pipeline" git add version.txt git commit -m "Bump version to $NEW_VERSION" git push origin "$BUILD_SOURCEBRANCHNAME" displayName: '提交版本文件到仓库' condition: in(variables['BUILD_SOURCEBRANCHNAME'], 'main', 'Develop', 'bugfix/*')
关键说明
- 版本存储:用
version.txt文件存储当前版本,首次运行会自动创建初始版本0.0.0 - 分支匹配:
BUILD_SOURCEBRANCHNAME是Azure Pipeline内置变量,直接获取当前触发构建的分支名 - 变量传递:通过
##vso[task.setvariable]命令将新版本号设为全局变量,后续步骤可直接引用$(NEW_VERSION) - Git提交:可选步骤用于将更新后的版本文件提交回仓库,需要确保Pipeline服务账号有仓库的推送权限
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

