TFS 2015构建定义以查找另一个构建的工件位置

时间:2016-06-10 19:13:28

标签: tfsbuild tfs2015

我正在创建一个提升构建定义,它从上一个成功的持续集成构建中获取输出[artifact]并将其部署到更高的环境。 这是TFS 2015所以我使用的是BuildHttpClient

VssConnection connection = new VssConnection(new Uri(accountUrl), new VssAadCredential());
var projectClient = connection.GetClient<ProjectHttpClient>();
var project = projectClient.GetProject("project.name").Result;
var buildClient = connection.GetClient<BuildHttpClient>();
var builds = buildClient.GetBuildsAsync(project.Id, maxBuildsPerDefinition: 1, ResultFilter: BuildResult.Succeeded).Result;
    foreach (var build in builds)
    {
     if (build.Definition.Name == "CI BuildDefinition Name")
                            {

这是我尝试阅读此构建的工件路径的地方。但是Build类没有工件或工件路径属性。

但是我确实发现有一个ArtifactResource类,我可以使用Data

所以我想尝试做类似的事情:

ArtifactResource art = buildClient.GetArtifactAsync...
string PathToArtifact =art.Data;

我错过了。 我也意识到maxBuildsPerDefinition: 1

中的builds

似乎不起作用,没有编译错误,但如果我想要最新的成功构建,我还需要做什么?

1 个答案:

答案 0 :(得分:1)

GetBuildsAsync调用Get Builds api,其中不包含构建工件信息。因此,您需要使用GetArtifactAsync来获取工件的信息。如果一个构建中存在多个工件,则可能需要使用GetArtifactsAsync。

    BuildArtifact ba = buildClient.GetArtifactAsync("ProjectName", buildId, "artifactname").Result;
    string downloadurl = ba.Resource.DownloadUrl;
    string localpath = ba.Resource.Properties["localpath"];
    string artifacturl = ba.Resource.Url;