如何从TFS 2015获取构建成功详情并导出TXT?需用什么API?
嘿,我来帮你搞定这个TFS 2015的需求!下面一步步给你讲清楚怎么获取带关联变更和工作项的构建详情,以及对应的API细节~
TFS 2015官方提供了REST API v2.0来获取构建全量详情,包括你需要的关联变更和工作项。这个API是最通用的方案,不管你用脚本还是代码都能轻松调用。
要获取指定构建的完整信息,用这个端点:GET http://{tfs-server}:8080/tfs/{collection}/{project}/_apis/build/builds/{buildId}?api-version=2.0&includeWorkItems=true&includeChanges=true
参数说明:
{tfs-server}:你的TFS服务器地址(比如tfsserver01){collection}:团队项目集合名称(比如DefaultCollection){project}:目标项目的名称{buildId}:你要查询的构建ID(可以从构建成功的URL里直接拿到,比如URL里的buildId=1234)includeWorkItems=true:强制返回关联的工作项数据includeChanges=true:强制返回关联的变更集/提交记录
这里给你两种实用方案,选你顺手的来:
方案1:PowerShell脚本(Windows环境首选)
PowerShell能直接处理JSON响应,还能轻松格式化内容保存成txt,而且自带身份验证适配TFS的域账号:
# 先配置你的参数 $tfsServer = "http://your-tfs-server:8080/tfs" $collection = "YourCollection" $project = "YourProject" $buildId = "1234" # 替换成你的构建ID $outputFile = "BuildSuccessDetails.txt" # 拼接API请求地址 $apiUrl = "$tfsServer/$collection/$project/_apis/build/builds/$buildId?api-version=2.0&includeWorkItems=true&includeChanges=true" # 发送请求(用当前登录账号验证,需要其他账号就改成 -Credential (Get-Credential)) $buildData = Invoke-RestMethod -Uri $apiUrl -Method Get -UseDefaultCredentials # 整理成易读的文本内容 $txtContent = @" 构建成功详情 ==================================== 构建ID: $($buildData.id) 构建编号: $($buildData.buildNumber) 构建状态: $($buildData.status) 完成时间: $($buildData.finishTime) 关联工作项列表: ==================================== "@ # 遍历添加工作项信息 foreach ($workItem in $buildData.workItems) { $txtContent += "ID: $($workItem.id) | 标题: $($workItem.title) | 类型: $($workItem.fields.'System.WorkItemType')`n" } $txtContent += @" 关联变更记录: ==================================== "@ # 遍历添加变更信息 foreach ($change in $buildData.changes) { $txtContent += "变更ID: $($change.id) | 作者: $($change.author.displayName) | 注释: $($change.comment)`n" } # 保存到txt文件 $txtContent | Out-File -FilePath $outputFile -Encoding UTF8 Write-Host "搞定!构建详情已经保存到 $outputFile"
方案2:curl命令行(跨平台适用)
如果你习惯用命令行,或者在Linux/macOS环境下,用curl配合jq(JSON解析工具)就能快速搞定:
# 配置参数 TFS_SERVER="http://your-tfs-server:8080/tfs" COLLECTION="YourCollection" PROJECT="YourProject" BUILD_ID="1234" OUTPUT_FILE="BuildSuccessDetails.txt" # 发送请求并格式化输出到txt(需要先安装jq) curl -u "你的用户名:你的密码" "$TFS_SERVER/$COLLECTION/$PROJECT/_apis/build/builds/$BUILD_ID?api-version=2.0&includeWorkItems=true&includeChanges=true" | jq -r ' "构建成功详情\n====================================", "构建ID: \(.id)", "构建编号: \(.buildNumber)", "构建状态: \(.status)", "完成时间: \(.finishTime)", "\n关联工作项列表:\n====================================", (.workItems[] | "ID: \(.id) | 标题: \(.title) | 类型: \(.fields."System.WorkItemType")"), "\n关联变更记录:\n====================================", (.changes[] | "变更ID: \(.id) | 作者: \(.author.displayName) | 注释: \(.comment)") ' > $OUTPUT_FILE
注:如果是Windows的Git Bash,记得加--ntlm参数适配域账号认证:curl --ntlm -u : ...
如果你的构建成功URL是类似http://{tfs-server}:8080/tfs/{collection}/{project}/_build?buildId=1234&_a=summary这样的,你可以自动提取buildId参数,不用手动输入。比如在PowerShell里加这段代码:
$buildUrl = "http://your-tfs-server:8080/tfs/YourCollection/YourProject/_build?buildId=1234&_a=summary" $uri = [Uri]$buildUrl $buildId = ($uri.Query.Split('&') | Where-Object { $_ -like 'buildId=*' } | ForEach-Object { $_.Split('=')[1] })
把这段加到前面的PowerShell脚本里,就能实现从URL自动获取构建ID啦。
肯定的!Team Foundation Server 2015完全提供了返回构建详情的API,就是我们上面用的Build REST API v2.0。除此之外,你也可以用.NET客户端库(Microsoft.TeamFoundationServer.Client)来编写C#代码实现,但REST API更轻量化,不需要编译,适合快速自动化场景。
内容的提问来源于stack exchange,提问作者Mit Jacob

