Как импортировать определение выпуска в Azure Devops (VSTS)? - PullRequest
0 голосов
/ 09 мая 2018

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

export release definition

Но я не могу найти способ импортировать это в целевой проект. Я получаю только варианты для создания новых определений.

create release definition

Ответы [ 5 ]

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

После экспорта генерирует файл json и сохраняет его в локальной папке. Затем нажмите кнопку «релиз» или «плюс» (+), нажмите на нее, и вы увидите там входную опцию, нажмите на нее и выберите этот файл json. и это все .....

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

Из-за прочтения вышеприведенных комментариев причина, по которой у вас возникают проблемы с импортом определения релиза из другого источника DevOps VSTS / Azure, заключается в том, что экспортированное вами определение релиза содержит ссылки GUID на объекты, которых нет в организации или проекте, которые вы импортируете определение выпуска в. Итак, вам нужно будет засучить рукава и поработать, чтобы получить плавное и полностью интегрированное определение выпуска, которое вы можете использовать в качестве шаблона. Мы будем использовать REST API, найденный здесь: https://docs.microsoft.com/en-us/rest/api/vsts/release/definitions/create?view=vsts-rest-4.1

Вот мой технический ответ и то, что я сделал, чтобы продублировать определение релиза, и создал шаблон для многократного использования:

  1. Экспорт определения выпуска по вашему выбору

  2. Отформатируйте JSON в каком-либо инструменте, например https://jsonformatter.curiousconcept.com, чтобы сделать его более читабельным, а затем сохраните его в текстовом файле, например ReleasePipelineTemplate-Formatted.json

  3. Я не знаю, какие компоненты вы определили в своем определении релиза, но посмотрите вокруг и посмотрите, как повсеместно используются GUID. Может быть полезно создать определение выпуска, чтобы найти GUID, которые вы собираетесь заменить.

  4. Идентификаторы GUID для поиска: SYSTEM_COLLECTIONID, SYSTEM_TEAMPROJECTID, SYSTEM_DEFINITIONID, BUILD_QUEUEDBYID

  5. Позвольте нам получить некоторые переменные, упомянутые выше, от вашей организации сборки и проекта. Чтобы получить их, нам нужно напечатать некоторые переменные окружения во время обычной сборки. Поэтому, пожалуйста, добавьте шаг сборки где-то в начале сборки CI, который добавляет шаг «Пакетный скрипт» с помощью следующей команды «C: \ Windows \ System32 \ cmd.exe» и аргумента «/ c set». После того, как сборка завершена, просмотрите журналы на этом этапе сборки и найдите значения для этих переменных. Они понадобятся вам в определении выпуска.

  6. Вы должны сделать копию, прежде чем мы изменим файл json. Вы должны немного обрезать файл json, удалив несколько вещей, таких как «creationOn», «ifiedBy », «ifiedOn». В самом низу «URL» находятся 3 ссылки. Например, их необходимо изменить с помощью GUID идентификатора командного проекта. Это просто пример мест, которые необходимо изменить. Пожалуйста, проверьте собственное определение выпуска.

  7. Я собираюсь предположить, что вы внесли необходимые изменения в свой файл 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
  1. Запустите ваш скрипт с помощью '. \ CreateReleasePipeline.ps1', и результат будет выглядеть примерно так:

.\CreateReleasePipeline.ps1
Creating Release Pipeline...
Create Release Pipeline done. Pipeline id: 71
Release definition: succeeded.
71
  1. Обновите веб-страницу Release Pipeline, и вы должны увидеть только что созданный Release Pipeline.

  2. Вы можете повторить попытку, пока не будете удовлетворены результатами.

Я использую этот REST API, чтобы поместить шаблон Release Definition в репозиторий исходного кода, чтобы мне не приходилось обновлять 50+ и увеличивать Release Pipelines, когда я вносил в них изменения. Я могу проверить вызов API REST, если существует определение выпуска, создать его, если его нет, обновить, если оно не обновлено. Все без необходимости сводить мою руку с необходимостью обновлять их вручную или создавать конвейер при создании нового репо get. Я хочу максимально автоматизировать все. Я хочу изменить один раз или как можно меньше и позволить обновлению системы.

Пожалуйста, дайте мне знать, если это поможет.

0 голосов
/ 15 мая 2018

Оставив это здесь в качестве добавления к принятому ответу.

Принятый ответ работает, но я должен отметить, что моя первоначальная проблема не была точно решена им.

По сути, если у вас нет существующих определений выпусков, кажется, нет способа импортировать определения. Что я сделал, так это создал «фиктивное» определение и затем следовал тому, что говорит принятый ответ. Создание хотя бы одного определения приведет вас к этому экрану, иначе вы получите только те экраны, которые я показываю в моем вопросе.

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

Поскольку VSTS переименовывается / обновляется в DevOps Azure , в пользовательском интерфейсе есть некоторые изменения, позволяющие найти этот вариант выше.

Для импорта

enter image description here

Для экспорта

enter image description here

Относительно дополнения

Все определения сборки / выпуска сопровождались одним термином, называемым Pipeline. Таким образом, нет необходимости создавать фиктивное определение выпуска для импорта нового. Вы можете импортировать новое определение выпуска, не имея фиктивного.

0 голосов
/ 09 мая 2018

enter image description here

Зайдите в Build and Releases, а затем Releases, и там вы найдете опцию. Нажмите кнопку +, и есть возможность импортировать определения версий

Дайте мне знать, если вам понадобится дополнительная помощь.

...