Azure DevOps仓库实现语义化版本自动升级及变更日志生成求助
基于Azure DevOps实现语义化版本+自动版本升级+变更日志方案
1. 锁死main分支的提交入口
- 进入Azure DevOps仓库的「设置」→「分支策略」,找到main分支:
- 勾选「要求拉取请求才能合并」,禁止任何人直接提交到main分支
- 设置合并方式为压缩合并,确保所有分支提交被压缩为单个提交
- 在「合并选项」中勾选「使用拉取请求标题作为合并提交的标题」,彻底解决Azure默认生成的
<Merged PR #PR_NUMBER>不符合规范的问题
2. 强制PR标题符合Conventional Commits规范
- 配置PR验证流水线,用脚本校验PR标题格式:
- 示例PowerShell脚本(直接放到流水线任务中即可):
$prTitle = "$(System.PullRequest.Title)" $pattern = "^(feat|fix|docs|style|refactor|perf|test|chore)\: .+" if ($prTitle -notmatch $pattern) { Write-Error "PR标题不符合Conventional Commits规范,格式应为:feat: 新增XX功能 / fix: 修复XX问题" exit 1 } - 将这个流水线设置为PR的必需检查项,只有标题符合规范才能进入合并流程
- 示例PowerShell脚本(直接放到流水线任务中即可):
3. 自动版本升级与变更日志生成
方案A:使用Azure DevOps市场扩展(快速实现)
- 安装「Semantic Versioning」扩展,在合并到main分支的流水线中添加以下任务:
- 运行「Semantic Versioning」任务,基于main分支的规范提交记录自动计算新版本(根据feat/fix等类型升级minor/patch版本)
- 运行「Conventional Changelog」任务,自动生成或更新
CHANGELOG.md文件 - 添加「Git Commit」任务,将新版本号文件(比如
VERSION)和CHANGELOG.md提交回main分支(需确保流水线服务账号有仓库写入权限)
方案B:自定义脚本实现(灵活可控)
- 在流水线中添加Node.js脚本任务:
- 安装依赖:
npm install conventional-changelog-cli semver -g- 生成变更日志:
conventional-changelog -p angular -i CHANGELOG.md -s -r 0- 计算新版本号(示例逻辑,可按需调整):
current_version=$(cat VERSION) last_commit_msg=$(git log -1 --pretty=%B) if [[ $last_commit_msg == "feat:"* ]]; then new_version=$(semver $current_version -i minor) elif [[ $last_commit_msg == "fix:"* ]]; then new_version=$(semver $current_version -i patch) else new_version=$current_version fi echo $new_version > VERSION- 提交变更:
git config user.name "Azure DevOps Pipeline" git config user.email "devops@example.com" git add VERSION CHANGELOG.md git commit -m "chore: 升级版本到$new_version" git push origin main
关键说明
- 功能分支的旧提交无需修改,压缩合并后main分支只保留PR标题对应的规范提交,不会影响版本计算和变更日志
- 无需在本地配置commitizen或钩子,所有管控都在Azure DevOps端完成,降低团队协作成本
内容的提问来源于stack exchange,提问作者Shadan
相关产品推荐
相关产品推荐

