TFS 2017 vNext构建失败自动创建Bug时自定义字段的问题咨询
TFS 2017构建失败自动创建Bug:修改「Created By」及自定义字段指南
一、能不能修改「Created By」字段?
答案是可以,但直接通过「附加字段」板块设置System.CreatedBy行不通——TFS在自动创建Bug时会强制把这个字段设为执行构建操作的身份(你现在看到自己的名字,大概率是因为构建代理是用你的个人账户运行的,或者构建定义的权限配置里用了你的身份)。要改成指定的团队成员或通用标识(比如DevBuild),有两种靠谱的办法:
方法1:切换构建服务账户(推荐)
如果希望所有构建失败生成的Bug都统一用某个通用账户创建,最省事的方式是修改构建代理的运行账户:
- 打开TFS管理控制台,找到你的构建代理池,选中对应的代理,修改它的运行身份为你想要的账户(比如域账户
DOMAIN\DevBuild)。 - 别忘了给这个账户配置权限:确保它在项目的「Contributors」组里,或者至少拥有「创建工作项」的权限,否则创建Bug会失败。
方法2:用PowerShell脚本手动创建Bug
如果不想改动代理账户,也可以在构建流程里加一个PowerShell任务,通过TFS REST API手动创建Bug,这样能完全控制Created By字段。举个简单的脚本示例:
# 配置TFS地址和认证信息 $tfsCollectionUrl = "http://你的TFS服务器地址:8080/tfs/你的集合名/你的项目名" $personalAccessToken = "你的个人访问令牌" # 需要有创建工作项的权限 $authHeader = @{Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$personalAccessToken"))} # 定义Bug的字段内容 $bugFields = @{} $bugData = @( @{ op = "add"; path = "/fields/System.Title"; value = "构建 $(Build.BuildNumber) 失败" }, @{ op = "add"; path = "/fields/System.Reason"; value = "构建失败" }, @{ op = "add"; path = "/fields/System.CreatedBy"; value = "DOMAIN\DevBuild" }, # 指定创建者 @{ op = "add"; path = "/fields/System.Description"; value = "构建于 $(Build.FinishTime) 失败,日志链接:$(Build.LogUri)" } ) # 转换为API要求的JSON格式 $requestBody = $bugData | ConvertTo-Json # 调用API创建Bug Invoke-RestMethod -Uri "$tfsCollectionUrl/_apis/wit/workitems/$`Bug?api-version=2.0" ` -Method Post ` -Headers $authHeader ` -Body $requestBody ` -ContentType "application/json-patch+json"
然后记得在构建定义的「选项」里关掉自动创建Bug的功能,把这个PowerShell任务设置为仅当构建失败时运行。
二、如何获取可用的Bug字段列表?
要自定义Bug的其他属性,你需要知道字段的引用名(比如System.Title),有两种简单的方式获取:
方式1:通过TFS Web界面查看
- 打开项目的工作项页面,新建一个Bug,点击页面右上角的「查看字段」(或者进入项目设置→工作项类型→Bug),就能看到所有可用字段的显示名和对应的引用名,这些引用名就是你在「附加字段」或脚本里要用到的。
方式2:调用TFS REST API查询
用这个API可以获取Bug类型的所有字段详情(包括引用名、数据类型、是否可编辑等):
GET http://你的TFS服务器地址:8080/tfs/你的集合名/你的项目名/_apis/wit/workitemtypes/Bug/fields?api-version=2.0
你可以用Postman、PowerShell或者浏览器直接访问这个接口(需要登录TFS),返回的JSON里会列出所有字段的详细信息。
最后提醒一下:有些系统字段是只读的(比如System.CreatedDate),无法手动设置,但System.CreatedBy可以通过API修改,只是不能直接在「附加字段」里配置。
内容的提问来源于stack exchange,提问作者Beryl
相关产品推荐
相关产品推荐

