Определение клона VSTS в C # - PullRequest
       29

Определение клона VSTS в C #

0 голосов
/ 05 февраля 2019

Я использую .GetDefinitionAsync и .CreateDefinitionAsync в BuildHttpClient для клонирования определения сборки VSTS.Это отлично работает, но я бы хотел создать def-сборку в другой папке, отличной от корневой папки проекта.Я могу добавить папки через веб-ссылку «Управление папками», но как я могу сделать это программно?

Я пробовал следующее:

    buildDef = JsonConvert.DeserializeObject<BuildDefinition>(json);
    buildDef.BuildNumberFormat = buildNumFormat;
    buildDef.Name = newBuildDefName;

    Uri tfsURI = new Uri(CollectionReleaseURL);
    buildDef.Url = tfsURI.ToString();
    await buildClient.CreateDefinitionAsync(buildDef, project);

Где выпуск Collection - путь: CollectionReleaseURL = @ "http://my.tfs.server8080/tfs/DefaultCollection/Project/Product/Release";

, но когда я запускаю программу, она просто помещает новую сборку def в следующую папку: @" http://my.tfs.server8080/tfs/DefaultCollection/Project"

Как я могу клонировать сборку defв папку ../Product/Release?

ОБНОВЛЕНИЕ: Я использую следующее для клонирования определения сборки, но оно НЕ копирует шаги сборки!Кто-нибудь знает, почему это так?

private static async Task CloneBuildDefAsync(int buildDefId, string newBuildDefName, string buildNumFormat, string sourceControlPath, string URLpath)
{
    var buildClient = createClient();
    var buildDef = (await buildClient.GetDefinitionAsync(project, buildDefId)) as BuildDefinition;

    buildDef.Project = null;

    var json = JsonConvert.SerializeObject(buildDef);
    json = json.Replace(sourceControlMainline, sourceControlPath);
    buildDef = JsonConvert.DeserializeObject<BuildDefinition>(json);

    buildDef.BuildNumberFormat = buildNumFormat;
    buildDef.Name = newBuildDefName;
    buildDef.Path = URLpath;

    await buildClient.CreateDefinitionAsync(buildDef, project);
}

Кажется, что копируется все, кроме шага сборки, все остальное клонируется и обновляется отлично: enter image description here

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Если вы используете Microsoft.TeamFoundationServer.Client, вы можете просто установить путь:

BuildDefinition cpBuild = BuildClient.GetDefinitionAsync(teamProjectName, 8).Result;

BuildDefinition build = new BuildDefinition();
build.Path = "New Build Folder";
build.Name = "new Build";
build.BuildNumberFormat = cpBuild.BuildNumberFormat;
build.Repository = cpBuild.Repository;
build.Process = cpBuild.Process;
var newBuild = BuildClient.CreateDefinitionAsync(build, teamProjectName).Result;
0 голосов
/ 13 февраля 2019

Это то, что я использовал для этого:

https://gist.github.com/HockeyJustin/c1cb4e543806c16cab6e2c2322f5d830

$thisBuildDef.Name = $Clone_Name
$thisBuildDef.path = $BuildDefURL  # Relative to the Project name; like "Release/2019"
$thisBuildDef.buildNumberFormat = $BuildNumberFormat

# Update source control path to new branch
$defAsJson = $thisBuildDef | ConvertTo-Json -Depth 100
$defAsJson = $defAsJson.Replace($sourceControlMainline, $sourceControlBranch)

$Uri = "$(TFSCollection)/$(TFSProject)/_apis/build/definitions?api-version=2.0"

$newBuildDef = Invoke-RestMethod -Uri $Uri -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Post -Body $defAsJson -ContentType "application/json" -ErrorAction Stop
0 голосов
/ 05 февраля 2019

Вы хотите установить свойство Path в нужную папку.

Пример клона в PowerShell:

$uri = 'https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}'

$result = Invoke-RestMethod -Method Get -Uri $uri -UseDefaultCredentials
$result.path = '\NewFolder\Location'
$result.name = "Testing"

$body = $result | ConvertTo-Json -Depth 7

Invoke-RestMethod -Method POST -uri 'https://dev.azure.com/{organization}/{project}/_apis/build/definitions?api-version=4.0' -UseDefaultCredentials -Body $body -ContentType 'application/json'

Создает структуру папки сборки следующим образом:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...