2016-06-10 113 views
0

我正在创建一个促进构建定义,该定义将最后一次成功的持续集成构建的输出[工件]并将其部署到更高的环境中。 这是TFS 2015年,所以我用BuildHttpClientTFS 2015构建定义来查找另一个构建的构件位置

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: 1builds

似乎

没有工作,没有编译错误,但我需要做的,如果我想在最近一次成功的构建?

+0

我强烈建议升级到TFS 2015更新2,并使用发布管理,因为它做你想要实现的。 – jessehouwing

+0

谢谢,是的,该选项在那里,将被使用。不过,我也正在寻找基于上述方法的解决方案。 – skundu

回答

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; 
+0

真棒。这工作! – skundu