Azure Artifacts 上游源

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

使用上游源,可以在单个源中方便地存储来自各种源的包。 这包括发布的包以及从外部源和公共注册表(如 NuGet.org、npmjs.com、Maven Central 和 PyPI)使用的包。 启用上游源后,从这些上游源安装的任何包都会自动将副本保存到源。

注意

若要从 上游 保存包,必须具有源和上游读取者(协作者)角色或更高版本。 有关详细信息,请参阅 权限

优点

启用上游源提供了多种优势,用于管理单个源中的产品的依赖项:

  • 简单性: 将所有包发布到单个源时,它会简化配置文件,例如 NuGet.config、npmrc 或 settings.xml。 仅使用配置文件中的一个源,可以减少错误和 bug 的可能性,从而简化设置。

  • 确定性: 源按顺序解析包请求,从而在重新生成代码时产生更一致性。

  • 来源:源保留从上游源保存的包的相关信息。 这允许你验证你使用的是原始包,而不是副本或潜在的恶意版本。

  • 放心:从上游源安装的每个包都会自动保存到源中。 这意味着,即使上游源已禁用、删除或正在进行维护,也可以放心地继续开发和生成,因为源中有该包的副本。

最佳做法 - 包使用者

若要充分利用上游源作为包使用者的优势,请遵循以下最佳做法:

在配置文件中使用单个源:

为了使源提供确定性的还原,请确保配置文件(如 nuget.config 或 .npmrc)仅引用启用了上游源的一个源。 请参阅以下示例:

<packageSources>
  <clear />
  <add key="FabrikamFiber" value="https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/nuget/v3/index.json" />
</packageSources>

注意

NuGet 编译多个 配置文件 ,以确定要应用的完整选项集。 通过使用 <clear />,可以有效地忽略在更高级别配置文件中指定的所有其他包源。

registry=https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/npm/registry/
always-auth=true

有意订购上游源:

如果你只使用公共注册表(如 nuget.org 或 npmjs.com),则上游源的顺序无关紧要。 向源发出的请求遵循搜索顺序部分详述 的顺序

但是,当你管理多个源(可能包括源和公共注册表的组合)时,会按源的配置设置中列出的顺序搜索每个上游源。 在这种情况下,我们建议将公共注册表放在上游源列表中。

在某些独特的方案中,某些组织选择自定义开源软件 (OSS) 包。 这可能涉及解决安全问题、增强功能或满足需要内部重新生成包的特定要求,而不是直接从公共存储库获取它。 如果你的组织遵循这种做法,建议将包含这些修改的 OSS 包的上游源放在公共包管理器之前。 这种安排可确保使用组织的自定义版本。

使用建议的默认视图:

将远程源添加为上游源时,必须选择其源的视图。 这使上游源能够构造一组可用的包。 有关更多详细信息,请参阅上游如何构造可用包集。

最佳做法:源所有者/包发布者

若要确保源易于配置为上游源,请考虑应用以下最佳做法:

使用默认视图:

所有新建源的默认视图是@Local视图,其中包含发布到源或从上游源保存的所有包。

如果要使用其他视图(例如新发布的包版本的视图),可以将包提升到 @Release 该视图,然后使该视图可供包使用者使用。

构造包图:

若要构造包图,只需连接到源的默认视图并安装要共享的包。 将包保存到默认视图时,想要使用它的用户将能够解析包图形并安装所需的包。 来自上游源的包根据相应上游源的配置视图显示。

搜索顺序

对于支持多个源(如 NuGet 和 Maven)的公共包管理器,查询源的顺序有时可能不清楚或不确定。 例如,在 NuGet 中,并行查询将发送到配置文件中的所有源,并以先出(FIFO)方式处理响应。

上游源按以下顺序搜索源及其上游源来解决这种不确定行为:

  1. 已发布到源的包。

  2. 已从上游源保存的包。

  3. 可从上游源获取的包。 每个上游源按源配置中列出的顺序进行搜索。

若要充分利用快速查找功能,建议在配置文件中仅包含一个源。

注意

不支持使用 NuGet 包资源管理器在上游源中搜索包。

从上游源保存包

为源启用上游源并从上游源安装包时,该包的自动副本将保存到源。 这种做法可增强下载性能并节省网络带宽。

例如,可以使用 npm 安装 express 之类的命令直接从上游源安装包。 或者,包可以作为依赖项解析过程的一部分进行安装。 在后一方案中,安装 express 也会保存其依赖项,例如 接受

注意

仅 npm 包支持自定义上游源。

替代来自上游源的包

启用上游源时,请务必注意,无法发布上游源中已存在的包版本。 例如,如果启用 NuGet.org 上游,将无法发布 Newtonsoft.Json 10.0.3 包,因为该确切版本已存在于 NuGet.org 中。

如果需要发布已在其中一个上游源中存在的包版本,则必须执行以下步骤:

  1. 禁用相关的上游源。
  2. 发布包。
  3. 重新启用上游源。

注意

包版本是不可变的。 即使禁用或删除上游源,保存的包仍保留在源中。

上游源运行状况

如果源上游源失败,则无法再刷新同一协议的包的元数据。 若要检查上游源的运行状况,请执行以下步骤:

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择“ 项目”,然后从下拉菜单中选择源。

  3. 选择齿轮图标 齿轮图标 以导航到 源设置,然后选择 上游源

    显示上游源上次同步状态的屏幕截图。

  4. 如果发生任何故障,将显示警告消息。 单击 “失败 ”状态将提供其他详细信息,包括失败的原因以及有关如何解决失败的说明。

    显示同步失败详细信息的屏幕截图。

注意

对于公共注册表(如 NuGet.org),包推送到公共注册表的时间以及下载包的时间之间有 3-6 小时的延迟。 此延迟取决于作业计时和数据传播。 但是,当上游源是 Azure Artifacts 源时,延迟通常不超过几分钟。

脱机上游源

上游源是消费者和基础结构的宝贵保障,可防范意外中断。 从上游源安装包时,该包的副本将保存到源中。 如果上游源体验停机、进行维护或暂时不可用,仍可以从源检索所需的包并继续开发。

常见问题

问:即使可以在源的上游之一看到,也找不到我的包?

答:上游源中的包在发布后立即在下游可用。 但是,包仅在引入源后才会显示在源的 UI 中。 当源和上游读取器(协作者)或更高版本从上游安装包版本时,将触发引入。

问:什么是源视图?

答:视图允许开发人员有选择地共享已测试和验证的包版本的子集,不包括仍在开发或尚未满足质量标准的任何包。 有关详细信息,请参阅 什么是源视图

问:找不到要配置为上游源的源?

答:确保源的所有者将视图共享为上游源。

问:具有源读取者角色的用户是否可以从上游源下载包?

答:否。 Azure Artifacts 源中具有 源读取者 角色的用户只能下载已保存到源的包。 当源和上游读取者(协作者)、源发布者(参与者)源所有者从上游安装这些包时,包将保存到源。

问:当用户删除或取消发布从上游源保存的包时,会发生什么情况?

答:包无法从源下载,版本号将永久保留。 此外,不再从上游源保存包。 包的早期和更高版本将不受影响。

问:当用户弃用从上游源保存的包时会发生什么情况?

答:当用户弃用包时,会将警告消息添加到包的元数据中,每当从源查看或安装包时,都会显示该消息。