2016-06-10 115 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