Универсальные пакеты Azure DevOps — Получите версию артефакта, загруженную из внешнего канала

#azure #azure-devops #azure-pipelines #azure-pipelines-build-task #azure-artifacts

Вопрос:

Я ищу способ получить номер версии артефакта, загруженного с помощью задачи универсального пакета из внешнего канала. Поскольку я настроил загрузку последней версии versionDownloadExternal : '*' после загрузки, мне нужно знать, какая версия была загружена.

 - task: UniversalPackages@0
  displayName: 'Universal download'
  inputs:
  feedsToUse: external
  externalFeedCredentials: '${{ parameters.externalFeedCredentials }}'
  feedDownloadExternal: 'temp-feed'
  packageDownloadExternal: 'temp-artifact'
  downloadDirectory: '$(Pipeline.Workspace)/drop'
  versionDownloadExternal: '*'
 

Просматривая журналы Универсальной задачи загрузки, я вижу, что версия есть (1.5.0), но не смог найти способ сохранить ее в переменной, чтобы использовать ее в дальнейшем.

 {"Version":"1.5.0","SuperRootId":"6AAB600ECBE6DF7FAD87B8C49E7B21E32BB1439F410F0A76E41A220630D0847002","ManifestId":"629C9E66D4A57250DD4A430723E6B9338F995133BCFE65D6868BF7E97F1723DA02","Description":"Klevr Portal Build Artifact"}
{"@t":"2021-10-27T09:18:14.3239876Z","@m":"ApplicationInsightsTelemetrySender will correlate events with X-TFS-Session abc855f4-be5a-4de2-91ed-d9827170d1ee","@i":"889d9dc4","SourceContext":"ArtifactTool.Commands.UPackDownloadCommand","UtcTimestamp":"2021-10-27 09:18:14.323Z"}
{"@t":"2021-10-27T09:18:14.9356386Z","@m":"Found matching version: 1.5.0","@i":"2843490c","SourceContext":"ArtifactTool.Commands.UPackDownloadCommand","UtcTimestamp":"2021-10-27 09:18:14.935Z"}
{"@t":"2021-10-27T09:18:14.9902407Z","@m":"Obtained package metadata","@i":"ae648446","SourceContext":"ArtifactTool.Commands.UPackDownloadCommand","UtcTimestamp":"2021-10-27 09:18:14.990Z"}
...
 

Есть какие-нибудь идеи? Спасибо.

Ответ №1:

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

В качестве обходного пути вы можете попробовать добавить задачу PowerShell для запуска Rest API: Сведения об артефакте — Получить пакет для получения последней версии. Затем вы можете задать его в переменной конвейера.

Вот пример:

 $connectionToken="PAT Token"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))

$url = 'https://feeds.dev.azure.com/{Organization}/{Project}/_apis/packaging/Feeds/{Feedname}/Packages/{PackageID}/versions?api-version=6.0-preview.1'

$PackageInfo = (Invoke-RestMethod -Uri $url -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}) 

$LatestVersion= $PackageInfo.value.version | Select-Object -first 1


Write-Host "Latest package Version = $LatestVersion"
echo "##vso[task.setvariable variable=latestversion;isOutput=true]$LatestVersion" 
 

Результат:

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