Автоматически продвигать пакет nuget с помощью определения релиза

Есть ли в onprem Azure DevOps (версия 17.143.28621.4) способ автоматического продвижения пакета nuget из одного представления в другое с помощью задачи в определении выпуска?

Когда мы запускаем выпуск сборки, артефакты (то есть пакеты nuget) проходят два этапа.

  1. Предварительный выпуск: пакеты помещаются в фид (в конечном итоге в представлении @Local).
  2. Выпуск: пакеты следует повысить с @Local до @Release.

К сожалению, этап 2 в настоящее время выполняется вручную в веб-интерфейсе Azure DevOps. Можно ли автоматизировать через определение выпуска?

Если это невозможно, есть ли лучший способ организовать наш конвейер выпуска и каналы / представления пакетов, чтобы полностью автоматизировать выпуск пакетов nuget?


person bitbonk    schedule 14.06.2019    source источник
comment
Это расширение для облачной версии Azure Devops.   -  person DrDoomPDX    schedule 14.06.2019


Ответы (2)


Следующий сценарий PowerShell можно использовать для продвижения нескольких пакетов. Этот сценарий предполагает, что все пакеты имеют одинаковую версию (один продукт состоит из нескольких пакетов). Он отлично работает с нашим «DevOps Server 2019».

param(
  [Parameter(Mandatory=$True)]
  [string]$tfsCollectionUri,
  [Parameter(Mandatory=$True)]
  [string]$feedName,
  [Parameter(Mandatory=$True)]
  [string]$packageVersion,
  [Parameter(Mandatory=$True)]
  [string]$packageQuality
)

$ErrorActionPreference = "Stop"

[regex]$nameExpression = "(?<name>[^0-9]*)\."
$json = '{ "views": { "op":"add", "path":"/views/-", "value":"' + $packageQuality + '" } }'
Write-Verbose -Message $json

Get-ChildItem . -Filter *.nupkg | Foreach-Object {
  $matches = $nameExpression.Match($_.Name)
  $packageName = $matches.groups['name']
  $requestUri = $tfsCollectionUri + "/_apis/packaging/feeds/$feedName/nuget/packages/$packageName/versions/$packageVersion" + "?api-version=5.0-preview.1"
  Write-Verbose -Message $requestUri
  $reponse = Invoke-RestMethod -Uri $requestUri -UseDefaultCredentials -ContentType "application/json" -Method Patch -Body $json
  Write-Verbose -Message "Response: '$reponse'"
}

Параметр packageQuality должен быть, например, «Релиз» или «Пререлиз», без символа «@» в начале.

Большое спасибо Шайки Абрамчик за подсказку в правильном направлении.

person lg2de    schedule 18.06.2019
comment
Я принимаю это как ответ, хотя Шайки Абрамчик дал правильный начальный указатель, потому что этот ответ содержит фактический образец кода . - person bitbonk; 18.06.2019

Изменить: теперь я вижу, что вы используете локальный сервер, поэтому расширение не будет работать для вас, поэтому вы должны использовать Обновить версию пакета Rest API.

Добавьте задачу PowerShell для выполнения API, что-то вроде этого (это для рабочего элемента обновления, просто измените тело и URL-адрес на правильный Rest API):

введите описание изображения здесь

Не забудьте установить флажок в параметрах задания агента: разрешить скриптам доступ к токену OAuth.

Если вы используете Azure DevOps, вы можете установить Продвинуть пакет в представление выпуска и добавьте его в свой конвейер:

введите описание изображения здесь

person Shayki Abramczyk    schedule 16.06.2019
comment
Спасибо, что указали мне правильное направление. Меня немного смущает первый скриншот. Вроде показывает совершенно другой API (рабочие элементы). Что вы хотели показать на этом снимке экрана? - person bitbonk; 18.06.2019
comment
Это просто пример того, как использовать встроенную оболочку PowerShell для вызова rest api, вам просто нужно изменить тело и URL-адрес запроса для вашей цели в соответствии с правильными документами rest api. - person Shayki Abramczyk; 18.06.2019
comment
Я думаю, что это может быть лучше в виде двух отдельных ответов. Это два очень разных подхода: использование задачи PowerShell или стороннее расширение. - person Vince Bowdren; 05.07.2019
comment
Я не хочу отделять ответ от одного и того же пользователя. Похоже, пользователь хочет больше репутации .... - person Shayki Abramczyk; 05.07.2019