it-swarm.com.ru

Как вы импортируете определение выпуска в VSTS?

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

 export release definition

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

 create release definition

3
reggaemahn

 enter image description here

Перейдите в раздел «Сборка и релизы», а затем «Выпуски», и там вы найдете опцию . Нажмите кнопку +, и есть опция для импорта определений релизов.

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

2
noor

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

Для импорта

 enter image description here

Для экспорта

 enter image description here

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

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

4
Jayendran

Из прочтения приведенных выше комментариев причина, по которой у вас возникают проблемы с импортом определения релиза из другой оригинизации DevOps VSTS/Azure, заключается в том, что экспортированное вами определение релиза содержит GUID ссылки на объекты, которых нет в организации или проекте что вы импортируете определение выпуска в. Итак, вам нужно будет засучить рукава и поработать, чтобы получить успешное гладкое и полностью интегрированное определение выпуска, которое вы можете использовать в качестве шаблона. Мы собираемся использовать API REST, найденный здесь: 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 для помещения шаблона определения выпуска в репозиторий исходного кода, чтобы мне не приходилось обновлять 50+ и увеличивать конвейеры выпуска, когда я вносил в них изменения. Я могу проверить вызов API REST, если существует определение выпуска, создать его, если его нет, обновить, если оно не обновлено. Все без необходимости сводить мою руку с необходимостью обновлять их вручную или создавать конвейер при создании нового репо get. Я хочу максимально автоматизировать все. Я хочу изменить один раз или как можно меньше и позволить обновлению системы.

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

3
Antebios

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

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

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

0
reggaemahn

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

0
user9189050