如何通过TFS2018 API检索解决方案及特定构建关联的全部方案文件?
我来帮你拆解这两个问题,下面结合TFS2018的REST API细节来一步步说明:
1. 如何使用TFS2018 API检索解决方案文件
解决方案文件(.sln)通常存储在Git或TFVC仓库中,所以我们需要针对不同的仓库类型调用对应的API端点:
情况1:代码存在Git仓库中
步骤1:准备认证信息
首先生成一个个人访问令牌(PAT),权限至少勾选「Code (Read)」。请求时把PAT放在Authorization头里,格式是Basic <base64编码的PAT>(注意:编码时用户名留空,只编码:<你的PAT>,比如用命令echo -n ":your-pat-value" | base64生成)。
步骤2:调用API筛选.sln文件
使用GET请求,通过Items端点递归检索仓库中所有.sln文件,URL格式如下:
http://<你的TFS服务器地址>:8080/tfs/<集合名>/<项目名>/_apis/git/repositories/<仓库ID>/items?path=/&recursionLevel=Full&includeContentMetadata=true&api-version=3.2&%24filter=contains(path,'.sln')
- 把
<仓库ID>替换成你项目的Git仓库ID(可以通过仓库列表API获取) %24filter=contains(path,'.sln')是用来过滤出所有后缀为.sln的文件
举个curl命令的例子:
curl -u :your-pat-here "http://tfs-dev:8080/tfs/DefaultCollection/MyWebProject/_apis/git/repositories/1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p/items?path=/&recursionLevel=Full&includeContentMetadata=true&api-version=3.2&%24filter=contains(path,'.sln')"
返回的JSON结果里会包含每个.sln文件的路径、大小、下载链接等信息。
情况2:代码存在TFVC仓库中
流程类似,只是调用TFVC的Items端点:
URL格式:
http://<你的TFS服务器地址>:8080/tfs/<集合名>/<项目名>/_apis/tfvc/items?path=$/<项目名>/&recursionLevel=Full&includeContentMetadata=true&api-version=3.2&%24filter=contains(path,'.sln')
同样用$filter筛选.sln文件,认证方式和Git仓库一致。
2. 获取与特定构建关联的所有解决方案文件
要实现这个需求,需要先拿到构建对应的源代码版本(Git提交ID/TFVC变更集),再基于这个版本检索对应的.sln文件:
步骤1:获取目标构建的详细信息
调用Builds端点获取构建的源代码关联信息:
GET请求URL:
http://<你的TFS服务器地址>:8080/tfs/<集合名>/<项目名>/_apis/build/builds/<构建ID>?api-version=3.2
返回结果里重点关注两个字段:
sourceVersion:该构建对应的Git提交哈希或者TFVC变更集编号repository:包含仓库ID和类型(Git/TFVC)
步骤2:基于源代码版本检索解决方案文件
如果是Git仓库
用步骤1拿到的仓库ID和sourceVersion(提交ID),调用Git Items端点并指定版本:
http://<你的TFS服务器地址>:8080/tfs/<集合名>/<项目名>/_apis/git/repositories/<仓库ID>/items?path=/&recursionLevel=Full&versionType=commit&version=<sourceVersion>&includeContentMetadata=true&api-version=3.2&%24filter=contains(path,'.sln')
这个请求会返回该构建对应的提交快照中存在的所有.sln文件,确保你拿到的是构建时使用的版本。
如果是TFVC仓库
用sourceVersion(变更集号)调用TFVC Items端点:
http://<你的TFS服务器地址>:8080/tfs/<集合名>/<项目名>/_apis/tfvc/items?path=$/<项目名>/&recursionLevel=Full&versionType=changeset&version=<sourceVersion>&includeContentMetadata=true&api-version=3.2&%24filter=contains(path,'.sln')
额外小技巧:从构建定义中直接获取指定的解决方案
如果你的构建定义明确指定了要构建的.sln文件,可以直接调用构建定义API拿到这个路径:
http://<你的TFS服务器地址>:8080/tfs/<集合名>/<项目名>/_apis/build/definitions/<构建定义ID>?api-version=3.2
返回结果里的process.parameters字段会包含solution参数,里面就是构建定义中配置的解决方案路径。
内容的提问来源于stack exchange,提问作者doorman

