如何批量下载Azure Artifacts包?

AMo*_*abi 5 azure azure-devops azure-artifacts

我的组织正在将我们的软件包(NuGet、NPM)迁移到 Azure Artifacts。我们已将大约 50,000 个 NuGet 包 (2GB) 推送到 Azure Artifacts。

如果我们对产品不满意,有没有办法将我的包从 Azure Artifacts 批量拉取到我的计算机或 Azure blob 存储?我主要关心的是提取我们的 NuGet 包,因为我们发布了数千个包。

我知道从私人 nuget feed 下载所有包,但我想知道是否有办法检索所有包的 zip 文件,或者使用其他方法批量下载所有包。

谢谢!

小智 8

我们没有批量下载选项,但您自己编写脚本会非常容易。

首先,您需要获得PAT。确保 PAT 具有包装(读取)范围。您将使用 PAT 作为身份验证密码。您使用的用户名并不重要。

然后,您需要获取提要中所有包的列表。您可以使用我们的Get Packages API 来实现此目的。

那么,对于NuGet包,协议如下:

  1. 下载源 URL(从“连接到源”对话框,以 结尾.../v3/index.json
  2. 读取返回的 JSON 文档,使用 @type = 从对象中获取 @id 属性PackageBaseAddress/3.0.0。这是PackageBaseAddress。请注意,实际值被视为实现细节。始终从index.json 检索地址。
  3. 如果您还没有版本列表,请下载,{PackageBaseAddress}/{PackageName (lowercased)}/index.json该列表将包含 JSON 数组形式的列表(我建议以这种方式获取版本,因为它们已经标准化)
  4. 从以下位置下载软件包{PackageBaseAddress}/{PackageName (lowercase)}/{PackageVersion (normalized)}/{PackageName (lowercase)}.{PackageVersion (normalized)}.nupkg
    • 例如{PackageBaseAddress}/restsharp/106.4.1/restsharp.106.4.1.nupkg
    • 请务必遵循重定向,因为该服务实际上会让您从我们的后端存储下载

对于 npm 包:

  1. 从“连接到源”对话框获取源 URL(将以 结尾.../npm/registry
  2. 下载{Feed URL}/{PackageName}(对于范围包,包括范围,例如{Feed URL}/@{Scope}/{PackageName}
  3. 每个版本的下载 URL 在 JSON 响应中列为版本。*.dist.tarball
  4. 再次强调,下载包时一定要处理重定向。