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

TFS 2015 build definition to find the artifact location of another build

我正在创建一个升级构建定义,它从上次成功的持续集成构建中获取输出 [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 class 没有工件或工件路径 属性。

不过我确实发现有一个 ArtifactResource class 有 Data 我可以使用。

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

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

我想念它。 我也意识到 maxBuildsPerDefinition: 1builds

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

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;