2016-06-10 1 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: 1 в builds

не кажется, не

работать, там нет ошибки компиляции, но то, что мне нужно делать, если я хочу последнюю успешную сборку?

+0

Я настоятельно рекомендую обновить до версии TFS 2015 update 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

awesome. Это работает! – skundu

 Смежные вопросы

  • Нет связанных вопросов^_^