Создание определения сборки с помощью API-интерфейса Devure Azure - PullRequest
0 голосов
/ 27 февраля 2019

Мы пытаемся создать определение сборки, скопировав другую информацию определения сборки, используя API-интерфейс Devops Rest Azure, однако получаем следующую ошибку:

HttpError BadRequest - Значение не может быть нулевым.Имя параметра: definition.Repository.Mappings.Mapping.ServerPath.

Ниже приведены шаги, которые мы выполняем

  1. Получение информации о сборке с помощью API - этот шаг работает нормально
  2. Измените имя определения сборки
  3. Создайте новое определение сборки, передав вышеуказанный запрос определений сборки Body

Пример кода

var buildDefinitionGet = client.GetBuildDefinitionsAsync("XXX.DevOps", "15");

var newBuildDefinition = buildDefinitionGet;
newBuildDefinition.name = "MVC2017-1";

var buildDefinition = await client               
   .CreateBuildDefinitionsAsync("XXX.DevOps", newBuildDefinition)
   .ConfigureAwait(false);

Вот структура тела запроса:

public class BuildDefinitionRequestBody
{
    public Process process { get; set; }
    public Repository repository { get; set; }
    public ProcessParameters processParameters { get; set; }
    public List<object> drafts { get; set; }
    public Queue queue { get; set; }
    public string name { get; set; }
    public string type { get; set; }
    public string queueStatus { get; set; }
}

Мы используем TFVC в качестве источника контроля.

Мы что-то пропустили?

1 Ответ

0 голосов
/ 04 марта 2019

В этих сценариях возможны два типа ошибок:

« definition.Repository.Mappings.Mapping.ServerPath » и «Definition.Repository.Mappings.Mapping.LocalPath».

Следующая ситуация на вашем пути вызовет вышеуказанную ошибку.

definition.Repository.Mappings.Mapping.LocalPath :


  1. uncпути не допускаются
  2. локальные сопоставления не могут быть абсолютными путями или выходить из каталога
  3. два сопоставления не должны иметь одинаковый локальный путь
  4. локальный путьчисло равно 0 или число сопоставления равно 0

definition.Repository.Mappings.Mapping.ServerPath :


  1. недопустимые недопустимые символы
  2. пустые поля не допускаются для пути к серверу или типа
  3. два сопоставления не должны иметь одинаковый путь к серверу

, поскольку на снимках экрана не показан весь локальный путь ипуть к серверу, пожалуйста, проверьте пути на основе выше ruфайлы на вашей стороне.И я предлагаю вам скопировать значение «Путь к серверу» из соответствующего кода проекта -> Файлы в верхней части страницы, чтобы убедиться, что пути к серверу указаны правильно.Для локальных путей я предлагаю вам удалить один за другим, чтобы убедиться, какой из них вызвал эту проблему.

Эквивалентный код 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'

Надеюсь, это поможет.

...