Я пытаюсь скопировать определение выпуска из одного проекта Azure Devops (VSTS) в другой. В исходном проекте я могу экспортировать определение выпуска как файл json.
Но я не могу найти способ импортировать это в целевой проект. У меня есть только возможности для создания новых определений.


Перейдите в раздел «Сборка и выпуски», а затем «Выпуски», и там вы найдете вариант. Нажмите кнопку +, и появится возможность импортировать определения выпусков.
Сообщите мне, если вам понадобится дополнительная помощь.
Я не знаю, как превзойти группу разработчиков и очередь агентов. При импорте появляется возможность выбора из раскрывающихся списков.
Если вы находитесь в проекте без определений выпуска, вы не увидите эту кнопку +, вам нужно создать новый пустой выпуск, сохранить его, а затем, когда вы вернетесь назад, вы увидите кнопку.
@raterus thank's ... эту информацию нужно добавить в ответ
Оставив это здесь как дополнение к принятому ответу.
Принятый ответ действительно работает, но я должен упомянуть, что моя первоначальная проблема не была решена им точно.
В основном, если у вас нет существующих определений выпусков, похоже, нет способа импортировать определения. Я создал «фиктивное» определение, а затем следовал принятому ответу. Создание хотя бы одного определения приведет вас к этому экрану, иначе вы получите только те экраны, которые я показываю в своем вопросе.
Обратите внимание, что ответ, на который это ссылается, заключается в использовании графического интерфейса для импорта загруженного файла json, который импортирует определение выпуска, удаляя ссылки на пользователей другой организации, очереди агентов, группы развертывания и другие объекты, специфичные для организации и командного проекта. Другой ответ показывает, что вам придется обойти эти проблемы и подготовить json-файл определения выпуска перед попыткой импорта.
Начиная с VSTS переименован / обновлен в Azure DevOps, есть некоторые изменения в пользовательском интерфейсе, чтобы найти эту опцию выше.
Все определения сборки / выпуска сопровождались одним термином «конвейер». Таким образом, нет необходимости создавать фиктивное определение выпуска для импорта нового. Вы можете импортировать определение нового выпуска без фиктивного.
Я не согласен с вашей точкой зрения о том, что не требуется фиктивный конвейер перед его импортом. Я нахожусь в том же положении, что и @jeevs - у меня есть новый проект Azure DevOps, в который я пытаюсь импортировать определение сборки. Однако из-за отсутствия существующих BD строка меню, содержащая параметр для импорта, не отображается. Кажется, что нет способа получить доступ к функции импорта, если хотя бы один BD уже существует.
Любая документация о том, как выглядит конвейер json? Везде используется файл yaml.
@Marcus вы можете найти модель json из здесь, которая представляет собой не что иное, как получить определение rest API
Я согласен с Филипом - без существующего конвейера, похоже, нет возможности импортировать.
Из прочтения комментариев выше причина, по которой у вас возникают проблемы с импортом определения выпуска из другого источника VSTS / Azure DevOps, заключается в том, что экспортированное определение выпуска содержит ссылки GUID на объекты, которые не существуют в организации или проекте, который вы импортируете. Определение выпуска в. Итак, вам придется засучить рукава и поработать, чтобы получить успешное плавное и полностью интегрированное определение выпуска, которое вы можете использовать в качестве шаблона. Мы собираемся использовать REST API, найденный здесь: https://docs.microsoft.com/en-us/rest/api/vsts/release/definitions/create?view=vsts-rest-4.1
Вот мой технический ответ и то, что я сделал, чтобы продублировать определение выпуска и создать шаблон, который будет использоваться многократно:
Экспортируйте определение выпуска по вашему выбору
Отформатируйте JSON в каком-нибудь инструменте, например https://jsonformatter.curiousconcept.com, чтобы сделать его более читабельным, а затем сохраните его в текстовом файле, например ReleasePipelineTemplate-Formatted.json.
Я не знаю, какие компоненты вы определили в своем определении выпуска, но посмотрите вокруг и посмотрите, как GUID используются повсюду. Было бы полезно создать определение выпуска, чтобы найти идентификаторы GUID, которые вам нужно будет заменить.
Идентификаторы GUID для поиска: SYSTEM_COLLECTIONID, SYSTEM_TEAMPROJECTID, SYSTEM_DEFINITIONID, BUILD_QUEUEDBYID
Позвольте нам получить некоторые переменные, упомянутые выше, от вашей организации сборки и проекта. Чтобы получить их, нам нужно распечатать некоторые переменные среды во время обычной сборки. Итак, добавьте шаг сборки где-нибудь в начале вашей сборки CI, который добавляет шаг «Пакетный сценарий» со следующей командой «C: \ Windows \ System32 \ cmd.exe» и аргументом «/ c set». После завершения сборки просмотрите журналы на этом этапе сборки и найдите значения для этих переменных. Они понадобятся вам в определении выпуска.
Вы должны сделать копию, прежде чем мы изменим файл json. Вам следует немного урезать файл json, удалив несколько вещей, таких как createdOn, modifiedBy, modifiedOn. В самом низу «url» находятся 3 ссылки. Их необходимо изменить, например, с помощью GUID идентификатора командного проекта. Это всего лишь пример мест, которые нужно изменить. Пожалуйста, проверьте свое собственное определение выпуска.
Я предполагаю, что вы внесли необходимые изменения в свой файл JSON и готовы попытаться его импортировать. Создайте сценарий PowerShell с именем CreateReleasePipeline.ps1, используя следующий пример сценария.
$homeDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$VSTS_RestApiHost = "https://vsrm.dev.azure.com/yourpath/_apis"
$VSTS_PAT = "YOUR_PAT_TOKEN_HERE"
$headers = @{Authorization = "Basic " + [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($VSTS_PAT)"))}
$relDefInfo = Get-Content "$homeDir\ReleasePipelineTemplate-Formatted.json"
Write-Host "Creating Release Pipeline..."
$createReleaseDef = "$($VSTS_RestApiHost)/release/definitions?api-version=4.1-preview.3"
$response = Invoke-RestMethod -Method Post -Uri $createReleaseDef -Body $relDefInfo -ContentType 'application/json' -Headers $headers
Write-Host "Create Release Pipeline done. Pipeline id: $($response.id)"
if ($response.id -gt 0) {
Write-Host "Release definition: succeeded."
}
Write-Host $response.id.\CreateReleasePipeline.ps1
Creating Release Pipeline...
Create Release Pipeline done. Pipeline id: 71
Release definition: succeeded.
71Обновите веб-страницу Release Pipeline, и вы должны увидеть только что созданный Release Pipeline.
Вы можете продолжить и повторить попытку, пока не будете удовлетворены своими результатами.
Я использую этот REST API, чтобы поместить шаблон определения выпуска в репозиторий исходного кода, чтобы мне не приходилось обновлять 50+ и растущие конвейеры выпуска, когда я вношу в них корректировку. Я могу с помощью вызова REST API проверить, существует ли определение выпуска, создать его, если его нет, обновить, если оно устарело. И все это без необходимости сжимать руку, чтобы обновлять их вручную или создавать конвейер при создании нового репозитория get. Я хочу максимально автоматизировать все. Я хочу изменить один или несколько раз, чтобы система обновилась сама.
Пожалуйста, дайте мне знать, если это поможет.
Здравствуйте, подход работает для создания конвейеров сборки. Когда я использую тот же подход, который вы упомянули, я получаю страницу, которая не найдена. DevOps.azure.com/VSS/_apis/release/…: Страница не найдена DevOps.azure.com/VSS/_apis/build/…: Работает
Привет @Antebios. Я выполняю те же шаги, которые вы упомянули. Работает нормально. Но смогли ли вы установить пул агентов в файле json. В экспортированном определении json я не вижу такого атрибута, как очередь / пул.
После экспорта он сгенерирует файл json и сохранит его в локальной папке. Затем перейдите к выпуску или нажмите кнопку «плюс» (+), и вы увидите опцию inport, нажмите на нее и выберите этот файл json. вот и все.....
Отлично сработало, спасибо! Это дает мне предупреждение, говоря
Following properties in the release definition are not imported: Agent Queues, Deployment Groups, Deployment Group Tags, Approvals, Variable Groups and values of secret variables.Каким-либо образом обойти это?