Автоматически продвигать пакет nuget, используя определение релиза - PullRequest
4 голосов
/ 14 июня 2019

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

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

  1. PreRelease : пакеты помещаются в канал (в конечном итоге в представлении @Local).
  2. Release : пакеты должны быть переведены из @Local в представление @Release.

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

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

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Следующий скрипт 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 должен быть, например, «Release» или «Prerelease», без начального «@».

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

2 голосов
/ 16 июня 2019

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

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

enter image description here

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

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...