TFS 2015 Update3 vNext构建如何获取特定构建的变量?
获取TFS 2015 Update3 vNext构建的运行时变量与Artifact
一、获取特定构建的运行时变量
你之前用GetBuildsAsync拿到的Build对象是轻量级的,默认不会返回变量这类扩展属性。要获取特定构建的变量,有两种可行方式:
- 针对单个构建获取完整详情
直接调用GetBuildAsync并指定扩展参数,让接口返回变量信息:
var specificBuild = await vNextBuildClient.GetBuildAsync(myProject, buildId, expand: BuildExpand.Variables); // 此时specificBuild.Variables就是该构建运行时的变量集合
- 批量获取时指定扩展参数
如果需要一次性获取多个构建的变量,在GetBuildsAsync中加上expand参数即可:
var buildsvNext = await vNextBuildClient.GetBuildsAsync( project: myProject, buildIds: listOfIDs, expand: BuildExpand.Variables ); foreach (var build in buildsvNext) { // 现在build.Variables就能访问到该构建的变量了 }
需要注意:只有被TFS构建系统追踪的变量(比如通过任务设置、脚本中用##vso[task.setvariable]命令修改的变量)才会被包含在返回结果里。如果是脚本内部临时定义的变量(没通过官方命令暴露给TFS),API是拿不到的——这种情况确实需要你在构建期间显式存储,比如写入构建日志、保存到Artifact文件,或者存入变量组。
二、正确获取Artifact文件夹内容
你之前尝试的直接拼接URL方式,在TFS 2015 Update3里可能因为API版本或权限校验问题无法正常工作,推荐用官方BuildHttpClient的方法来操作:
- 先定位目标Artifact
var artifacts = await vNextBuildClient.GetArtifactsAsync(myProject, buildId); var dropArtifact = artifacts.FirstOrDefault(a => a.Name == "drop");
- 查看Artifact的文件结构
如果要查看drop文件夹里的文件列表,调用GetArtifactContentAsync:
if (dropArtifact != null) { var artifactContent = await vNextBuildClient.GetArtifactContentAsync( project: myProject, buildId: buildId, artifactName: "drop", path: "/" // 传根路径可获取整个drop的结构,也可指定具体子路径 ); // artifactContent包含该路径下的文件和文件夹信息 }
- 下载整个Artifact压缩包
如果需要下载完整的drop文件夹,用GetArtifactContentZipAsync:
using (var zipStream = await vNextBuildClient.GetArtifactContentZipAsync(myProject, buildId, "drop")) { // 将流保存到本地文件 using (var fileStream = new FileStream("drop.zip", FileMode.Create)) { await zipStream.CopyToAsync(fileStream); } }
总结
- 特定构建的变量可通过API扩展参数直接获取,无需额外存储(只要变量被TFS构建系统追踪);
- 获取Artifact建议使用官方客户端方法,避免直接拼接URL带来的兼容性问题;
- 未被TFS追踪的临时变量,必须在构建过程中显式存储才能后续获取。
内容的提问来源于stack exchange,提问作者MisterGray
相关产品推荐
相关产品推荐

