使用发布分支时,如何为YAML流水线构建关联工作项?
解决Azure DevOps发布分支流水线关联工作项的问题
方案1:通过Azure DevOps CLI自定义关联逻辑
这种方式能精准筛选出上一版本分支到当前分支间的工作项,完全自定义控制范围:
- 在YAML流水线中添加CLI执行步骤(微软托管代理默认预装Azure DevOps CLI)
- 编写脚本实现以下逻辑:
- 获取所有
releases\*格式的分支,按语义版本排序(如releases\v1.1<releases\v1.2) - 根据当前构建分支(如
releases\v1.2)匹配出上一个版本分支(releases\v1.1) - 对比两个分支的提交历史,提取所有提交中关联的工作项ID(通常提交信息包含
#123这类标记) - 使用CLI命令将这些工作项链接到当前构建
- 获取所有
示例YAML片段:
steps: - script: | # 用系统令牌登录Azure DevOps CLI az devops login --org $(System.TeamFoundationCollectionUri) --token $(System.AccessToken) # 获取所有发布分支并按语义版本排序 branches=$(git branch -r | grep "releases/" | sed 's/origin\///' | sort -V) # 提取当前分支名称(去掉origin/前缀) current_branch=$(echo $(Build.SourceBranchName)) # 匹配上一个版本分支(可根据分支命名规则调整逻辑) prev_branch=$(echo "$branches" | grep -B1 "$current_branch" | head -n1) if [ -n "$prev_branch" ]; then # 提取两个分支间提交关联的工作项ID并去重 work_items=$(git log $prev_branch..$current_branch --oneline | grep -o "#[0-9]*" | sed 's/#//' | sort -u) # 批量关联工作项到当前构建 for wi in $work_items; do az boards work-item relation add --id $wi --relation-type "Related" --target-id $(Build.BuildId) --org $(System.TeamFoundationCollectionUri) --project $(System.TeamProject) done fi displayName: '关联上一版本以来的工作项'
方案2:利用流水线变量手动指定基准分支
如果版本分支命名规则固定(如按版本号递增),可以在触发流水线时手动传入上一版本分支作为变量,简化逻辑:
- 在YAML中定义可手动输入的变量
previousReleaseBranch - 直接对比当前分支和指定基准分支的提交,提取工作项并关联
示例调整:
variables: - name: previousReleaseBranch displayName: '上一版本分支(如releases\v1.1)' type: string steps: - script: | az devops login --org $(System.TeamFoundationCollectionUri) --token $(System.AccessToken) # 提取指定分支范围内的工作项ID work_items=$(git log $(previousReleaseBranch)..$(Build.SourceBranchName) --oneline | grep -o "#[0-9]*" | sed 's/#//' | sort -u) # 批量关联到当前构建 for wi in $work_items; do az boards work-item relation add --id $wi --relation-type "Related" --target-id $(Build.BuildId) --org $(System.TeamFoundationCollectionUri) --project $(System.TeamProject) done displayName: '关联指定基准分支以来的工作项'
方案3:通过自定义工作项查询筛选
- 在Azure DevOps中创建工作项查询,筛选条件为关联提交位于上一版本分支到当前版本分支的提交范围内
- 在流水线中调用该查询获取工作项列表,再批量关联到构建
注意:需确保提交与工作项已正确关联(如PR合并自动关联、提交信息包含工作项ID)
内容的提问来源于stack exchange,提问作者Paul Nicholas
相关产品推荐
相关产品推荐

