我正在尝试创建Azure DevOps Pipeline模板以从Azure Artifacts下载wheel文件。当我们尝试提供像
version: 'latest'
这样的版本时,此方法可以成功运行,如果我们提供像 version: '1.0.0'
这样的特定版本,则它会因错误而失败。根据 DownloadPackage@1 的 Microsoft 文档,我已按预期提供了所有内容。但不确定内部发生了什么。
有人可以帮我解决这里发生的事情吗
- task: DownloadPackage@1
displayName: "[DOWNLOAD] - ${{ parameters.packageName }}-${{ parameters.packageVersion }}"
inputs:
packageType: pypi
feed: "${{ parameters.feedName }}"
view: ${{ parameters.viewName }}
definition: ${{ parameters.packageName }}
version: ${{ parameters.packageVersion }}
downloadPath: $(System.ArtifactsDirectory)
错误:
##[错误]使用 url https://feeds.dev.azure.com/OrganizationName/_apis/Packaging/Feeds/FeedName%40View/Packages/PackageID/Versions/1.0.0 获取包元数据失败并出现错误错误:404:空
在 D:_tasks\DownloadPackage_randomId .216.0\package.js:67:31
在 processTicksAndRejections (节点:内部/进程/task_queues:96:5)
实际上,如果我们手动给出版本,则版本参数不接受尾随零。
即:对于 1.0.0 版本,我们应该给出 1 而不是 1.0.0,然后它就能按预期工作。
Azure Artifacts 中的包的 url 构建方式似乎是使用规范化版本,这确实没有尾随零。您可以看到这一点并尝试使用 feed 本身:
https://feeds.dev.azure.com/\
在 Versions 之后,您只能附加规范化版本或包版本的实际 id。 DownloadPackage@1 似乎在这个问题上失败了。
我的解决方法是在检索它之前对其进行标准化:
- script: |
$Version = '${{ parameters.packageVersion }}'
$NormalizedVersion = $Version -replace '(\.0)+$', ''
echo "Normalized version for package: $NormalizedVersion"
echo "##vso[task.setvariable variable=NormalizedVersion]$NormalizedVersion"
displayName: Convert version to normalized version
- task: DownloadPackage@1
displayName: Download package from Feed
inputs:
packageType: pypi
feed: ${{ parameters.feedName }}
definition: ${{ parameters.packageName }}
version: $(NormalizedVersion)
downloadPath: $(System.ArtifactsDirectory)