Как вы импортируете определение выпуска в VSTS?
4 ответа
Перейдите в раздел "Сборка и релизы", а затем "Выпуски", и там вы найдете опцию. Нажмите кнопку +, и есть возможность импортировать определения релизов
Дайте мне знать, если вам нужна дополнительная помощь.
Если вы не видите вариант импорта, вы можете попробовать создать первый пустой конвейер.
Когда он у вас есть, он включает опцию импорта
Поскольку VSTS переименовывается / обновляется в DevOps Azure, в пользовательский интерфейс внесены некоторые изменения, чтобы найти этот вариант выше.
Для импорта
Для экспорта
Относительно дополнения
Все определения сборки / выпуска сопровождались одним термином, называемым Pipeline. Таким образом, нет необходимости создавать фиктивное определение выпуска для импорта нового. Вы можете импортировать новое определение выпуска, не имея фиктивного.
Из прочтения приведенных выше комментариев причина, по которой у вас возникают проблемы с импортом определения релиза из другой оригинизации DevOps VSTS/Azure, заключается в том, что экспортированное вами определение релиза содержит ссылки 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, удалив несколько вещей, таких как "creationOn", "ifiedBy", "ifiedOn". В самом низу "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', и результат будет выглядеть примерно так:
.\CreateReleasePipeline.ps1
Creating Release Pipeline...
Create Release Pipeline done. Pipeline id: 71
Release definition: succeeded.
71
Обновите веб-страницу Release Pipeline, и вы должны увидеть только что созданный Release Pipeline.
Вы можете продолжить и повторить попытку, пока не будете удовлетворены своими результатами.
Я использую этот API-интерфейс REST для помещения шаблона определения релиза в репозиторий исходного кода, чтобы мне не приходилось обновлять 50+ и увеличивать конвейеры выпуска, когда я вносил в них изменения. Я могу проверить вызов API REST, если существует определение выпуска, создать его, если его нет, обновить, если оно не обновлено. Все без необходимости сводить мою руку с необходимостью обновлять их вручную или создавать конвейер при создании нового репо get. Я хочу максимально автоматизировать все. Я хочу изменить один раз или как можно меньше и позволить обновлению системы.
Пожалуйста, дайте мне знать, если это поможет.
Оставив это здесь как дополнение к принятому ответу.
Принятый ответ работает, но я должен отметить, что моя первоначальная проблема не была точно решена им.
По сути, если у вас нет существующих определений выпусков, кажется, нет способа импортировать определения. Что я сделал, так это создал "фиктивное" определение, а затем следовал тому, что говорит принятый ответ. Создание хотя бы одного определения приведет вас к этому экрану, иначе вы получите только те экраны, которые я показываю в моем вопросе.
После экспорта генерируется файл json, который сохраняется в локальной папке. Затем нажмите кнопку "релиз" или "плюс" (+), нажмите на нее, и вы увидите там опцию inport, нажмите на нее и выберите этот файл json. и это все.....