如何在Azure DevOps流水线执行失败时自动创建Bug
如何在Azure DevOps流水线执行失败时自动创建Bug?
完全可以实现,下面是两种常用的落地方式:
方法一:使用Azure DevOps内置的「Create Bug」任务
- 在流水线的末尾添加Create Bug任务,在任务的「控制选项」中设置运行此任务为「只有当任务失败时」(或更精确的表达式:
eq(variables['Agent.JobStatus'], 'Failed')) - 配置任务核心参数:
- 标题:用动态变量生成,比如
$(Build.DefinitionName) - 流水线失败于 $(Build.BuildNumber) - 描述:填入流水线关键信息,比如失败阶段、日志链接(
$(Build.LogUri))、触发分支等 - 按需设置指派对象、优先级、迭代路径等字段
- 标题:用动态变量生成,比如
- 确保执行该任务的服务账号拥有项目内创建Bug的权限
方法二:通过PowerShell脚本调用Azure DevOps REST API
如果需要更灵活的逻辑(比如去重、自定义字段赋值),可以用脚本实现:
- 编写PowerShell脚本,调用Azure DevOps工作项REST API创建Bug:
$orgUrl = "https://dev.azure.com/你的组织名" $projectName = "你的项目名" $pat = "$(System.AccessToken)" # 流水线内置系统令牌,需在流水线设置中启用「允许脚本访问OAuth令牌」 $headers = @{ "Authorization" = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) "Content-Type" = "application/json-patch+json" } $bugData = @( @{ op = "add" path = "/fields/System.Title" value = "$(Build.DefinitionName) - 流水线失败于 $(Build.BuildNumber)" }, @{ op = "add" path = "/fields/System.Description" value = "流水线链接:$(Build.Uri)`n失败阶段:$(Agent.JobName)`n触发分支:$(Build.SourceBranch)" }, @{ op = "add" path = "/fields/Microsoft.VSTS.Common.Priority" value = 2 } ) | ConvertTo-Json Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/wit/workitems/$Bug?api-version=7.1-preview.3" -Method Post -Headers $headers -Body $bugData
- 将脚本作为PowerShell任务添加到流水线,同样设置运行条件为流水线失败时执行
- 在流水线的「代理作业」设置中,勾选「允许脚本访问OAuth令牌」,确保脚本能获取到权限
额外注意事项
- 若要避免重复创建Bug,可以在脚本中先调用查询API,检查是否已有对应流水线编号的失败Bug,再决定是否创建
- 可以根据流水线的失败类型(构建失败/发布失败),自定义Bug的分类或标签字段
内容的提问来源于stack exchange,提问作者Sudheer
相关产品推荐
相关产品推荐

