【问题标题】:How to Bulk Download Azure Artifacts Packages?如何批量下载 Azure Artifacts 包?
【发布时间】:2019-07-02 16:52:18
【问题描述】:

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

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

我知道Download all packages from private nuget feed,但我想知道是否有办法检索我们所有软件包的 zip 文件,或者有其他方法可以批量下载我们所有的软件包。

谢谢!

【问题讨论】:

    标签: azure azure-devops azure-artifacts


    【解决方案1】:

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

    首先,您需要get a PAT。确保 PAT 具有打包(读取)范围。您将使用 PAT 作为验证密码。您使用的用户名无关紧要。

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

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

    1. 下载提要 URL(从“连接到提要”对话框,以 .../v3/index.json 结尾)
    2. 读取返回的JSON文档,从@type = PackageBaseAddress/3.0.0的对象中获取@id属性。这是 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. 从“连接到 Feed”对话框获取 Feed URL(它将以 .../npm/registry 结尾)
    2. 下载{Feed URL}/{PackageName}(对于作用域包包括作用域,例如{Feed URL}/@{Scope}/{PackageName}
    3. 每个版本的下载 URL 在 JSON 响应中列为versions.*.dist.tarball
    4. 同样,请务必在下载包时处理重定向。

    【讨论】:

    • 谢谢乔纳森!我有一个与此文档相关的问题:docs.microsoft.com/en-us/rest/api/azure/devops/… 虽然 API 调用与您描述的下载步骤略有不同,但上面的文档说“此 API 用于手动 UI 下载选项,而不是用于编程访问和脚本。您可以如果出于脚本目的访问此 api,则会受到严重限制。”可以继续你的步骤吗?
    • 我推荐使用我描述的方法,这是官方客户端实际使用的 NuGet/npm 下载协议,是为处理负载而构建的。
    • 在此处描述的方法中,有没有办法获取特定的 TFM 或列出每个包中的 TFM,或者只能通过下载实际包并查看 lib 文件夹来完成?跨度>
    • 您必须下载该软件包。我们目前不检查包以确定服务中兼容的 TFM。
    猜你喜欢
    • 2021-01-05
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多