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"}
...

有什么想法吗?谢谢。

最佳答案

由于Universal Packages任务没有输出变量,恐怕没办法直接生成最新版本相关的变量并在下一个任务中使用。

要解决此问题,您可以尝试添加 PowerShell 任务来运行 Rest API:Artifact Details - Get Package获取最新版本。然后您可以将其设置在管道变量中。

这是一个例子:

$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" 

结果:

enter image description here

关于Azure DevOps 通用包 - 获取从外部源下载的工件版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69736245/

相关文章:

azure-devops - 使用 Azure DevOps REST API 创建管道失败,错误为 "No pool was specified"

azure - FTP错误: 550 Access is denied in Azure Release Pipeline

azure - Visual Studio 2019 中缺少 Application Insights

azure - 如何在 Azure 资源管理器模板中使用现有的 Microsoft.Web/serverfarms?

azure - azure 管道中定义的参数的继承

powershell - Start-Job with credential in 自定义任务问题

azure - 如何使用 Azure B2C 处理多个 API

c# - 痛苦地缓慢 Azure 表插入和删除批处理操作

git - Azure DevOps错误: Git checkout failed with exit code: 1

azure-devops - 拒绝访问。需要使用池默认权限来执行操作