我正在创建一个提升构建定义,它从上一个成功的持续集成构建中获取输出[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
似乎不起作用,没有编译错误,但如果我想要最新的成功构建,我还需要做什么?
答案 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;