Azure Artifacts 下载失败

问题描述 投票:0回答:2

我正在尝试创建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)

azure azure-devops azure-pipelines azure-pipelines-yaml azure-artifacts
2个回答
0
投票

实际上,如果我们手动给出版本,则版本参数不接受尾随零。

即:对于 1.0.0 版本,我们应该给出 1 而不是 1.0.0,然后它就能按预期工作。


0
投票

Azure Artifacts 中的包的 url 构建方式似乎是使用规范化版本,这确实没有尾随零。您可以看到这一点并尝试使用 feed 本身:

https://feeds.dev.azure.com/\//_apis/Packaging/Feeds//Packages//Versions/

在 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)
© www.soinside.com 2019 - 2024. All rights reserved.