Получить список задач для определения сборки, используя клиентские библиотеки .NET для VSTS / TFS - PullRequest
0 голосов
/ 06 сентября 2018

Я использую клиентские библиотеки .NET для VSTS / TFS (https://docs.microsoft.com/en-us/vsts/integrate/concepts/dotnet-client-libraries?view=vsts), чтобы получить список задач для всех определений сборки для всех командных проектов. Я использую предварительную версию v16.139.0-preview пакет NuGet Microsoft.TeamFoundation.ExtendedClient (мне нужно, потому что мне нужно также получить рабочий процесс определения релиза, для которого вам нужен Microsoft.VisualStudio.Services.Release.Client, который имеет требование зависимости для ExtendedClient). Сервер (on- Prem) является TFS 2017.2. Я никоим образом не могу получить задачи / фазы / процесс. Это мой код:

VssConnection connection = new VssConnection(new Uri("http://tfsserver:8080/tfs/defaultcollection"), new VssClientCredentials());
ProjectHttpClient projectClient = connection.GetClient<ProjectHttpClient>();
IEnumerable<TeamProjectReference> projects = projectClient.GetProjects().Result;
BuildHttpClient buildClient = connection.GetClient<BuildHttpClient>();
foreach (var project in projects)
{
  IPagedList<BuildDefinition> buildDefinitions = buildClient.GetFullDefinitionsAsync2(project: project.Name, name: null).Result;
  foreach (BuildDefinition buildDefinition in buildDefinitions)
  {
    // get the tasks
  }
}

У кого-нибудь есть идеи, как это решить?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

С помощью @Andy мне удалось решить проблему. Я использовал Fiddler для вызова REST Api (http://server:8080/tfs/DefaultCollection/MyProject/_apis/build/definitions/1) и прочитал ответ JSON. Я обнаружил, что свойство «build» содержит коллекцию задач. Я исправил сценарий PowerShell, предоставленный @Andy:

Param(
   [string]$baseurl = "http://server:8080/tfs/DefaultCollection", 
   [string]$projectName = "MyProject",
   [string]$buildDefinitionID = "530",
   [string]$user = "domain\user",
   [string]$token = "PersonalAccessToken"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$uri = "$baseurl/$($projectName)/_apis/build/definitions/$buildDefinitionID"
Write-Host $uri
$result = (Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})

foreach ($task in $result.build)
{
    Write-Host $task.displayName
}
0 голосов
/ 07 сентября 2018

Просто попробуйте ниже пример C # с использованием клиентских библиотек .NET, протестируйте на TFS 2017.3 и VSTS , оба работают. (На моей стороне нет TFS 2017.2, если я правильно помню, TFS 2017.2 имеет аналогичный процесс сборки с TFS 2015, у него нет атрибутов "Process" и "phases".)

using System;
using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;

namespace RetrieveTaskList
{
    class Program
    {
        static void Main(string[] args)
        {
            //For TFS :
            var tfsUrl = "http://ws-tfs2017:8080/tfs/DefaultCollection";
            var buildClient = new BuildHttpClient(new Uri(tfsUrl), new VssAadCredential());

            //For VSTS:
            //var tfsUrl = "https://{account}.visualstudio.com";
            //var buildClient = new BuildHttpClient(new Uri(tfsUrl), new VssBasicCredential(string.Empty, "PAT here"));

            var definitions = buildClient.GetFullDefinitionsAsync(project: "ScrumProject");

            foreach (var definition in definitions.Result)
            {
                Console.WriteLine(string.Format("\n {0} - {1}:", definition.Id, definition.Name));

                // Get BuildDefinitionStep to array, each of which has a task property that contains things like the name of the task and the inputs.
                var tasks = definition.Steps.ToArray();

                //Get each step/task from the array
                foreach (var task in tasks)
                {
                    Console.WriteLine(task.DisplayName);
                }
            }
            Console.ReadLine();
        }
    }
}

enter image description here


Вы также можете использовать REST API , чтобы получить список задач из определения сборки.

PowerShell, например:

Param(
   [string]$baseurl = "http://server:8080/tfs/DefaultCollection", 
   [string]$projectName = "ProjectName",
   [string]$buildDefinitionID = "26",
   [string]$user = "domain\user",
   [string]$token = "password"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))


$uri = "$baseurl/$($projectName)/_apis/build/definitions/$buildDefinitionID"
Write-Host $uri
$result = (Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$tasks = $result.process.phases.steps.displayName

foreach ($task in $tasks)
{
  write-host $task
}

enter image description here

Вы также можете попробовать REST-клиент, перейдите по следующей ссылке: Получить список имен задач сборки VSTS / TFS

...