#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"
Результат: