You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:43:20