什么是上游源?

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

Azure Artifacts 上游源允许开发人员将来自各种源的包存储在单个源中,包括发布到源的包,以及从公共注册表(如 NuGet.orgnpmjs.com)安装的包。 启用上游源后,从上游源安装的任何包都会自动保存到您的订阅源中。

注意

要从上游保存包,必须拥有订阅和上游阅读者(协作者)的角色或更高权限的角色。 有关更多详细信息,请参阅 源角色和权限

为何使用上游源?

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

  • 简单性:将所有包存储在单个源中可以简化配置文件,例如 NuGet.confignpmrcsettings.xml。 只需在配置文件中添加一个源,便能减少设置的复杂性并最大程度地降低错误发生的可能性。

  • 一致的生成:源按定义的顺序解析包请求,帮助确保跨环境可预测且可靠的生成。

  • 包完整性:你的feed保留有关从上游源保存的包的元数据,使你能够验证其真实性并确保你使用的是原始版本,而不是复制或潜在的恶意版本。

  • 可靠性:从上游源安装的包会自动保存到你的源中。 这可确保即使上游源由于维护或其他问题而暂时不可用,也可确保继续访问,以便可以放心地继续开发和生成。

包使用者的最佳做法

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

在配置文件中使用单个源

为了使源提供 确定性还原,请确保配置文件(如 nuget.confignpmrc)仅引用启用了上游源的 一个源

  • 示例

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

    注意

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

有意识地安排上游资源

如果仅使用公共注册表 (如 NuGet.orgnpmjs.com),上游源的顺序不会影响行为。 向源发出的请求遵循 搜索顺序 部分中概述的顺序。

但是,管理多个源(例如源和公共注册表的组合)时,会按源配置设置中定义的顺序搜索每个上游源。 在这些情况下,我们建议先将公共注册表放在上游源列表中。

在某些独特的方案中,某些组织修改开放源代码软件 (OSS) 包以解决安全问题、增强功能或满足特定的内部要求,这些要求要求在内部重新生成包,而不是直接从公共存储库获取包。 如果组织遵循这种做法,请将包含这些自定义 OSS 包的上游源置于其他公共注册表之前。 这可确保使用自定义版本而不是公共版本。

源所有者和包发布者的最佳做法

为了确保你的数据源可以轻松配置为上游源,请遵循以下最佳实践:

使用默认视图

默认情况下,所有新创建的源都使用 @Local 视图。 此视图包括:

  • 直接发布到源的包。
  • 从上游源存储的包。

如果您想使用其他视图(例如新发布的包版本的视图),可以将您的包发布到 @Release 视图,然后使该视图对目标用户可用。 有关更多详细信息,请参阅源视图

构造包图

要构建一个包图,只需连接到数据源的默认视图,并安装您想要共享的包。 将包保存到默认视图后,想要使用它的用户将能够解析包图形并安装所需的版本。 来自上游源的包根据相应上游源的配置视图显示。 有关更多详细信息,请参阅上游如何构造可用的软件包集合

搜索顺序

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

Azure Artifacts 上游源通过按以下顺序搜索源及其上游源来强制实施结构化搜索顺序来消除这种不确定性:

  1. 直接发布到源的包。

  2. 从上游源保存的包。

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

注意

Azure Artifacts 不支持使用 Visual Studio 中的 NuGet 包资源管理器 在上游源中搜索包。

从上游源保存包

当在你的源启用上游源时,Azure Artifacts 会自动保存从该上游源安装的任何包的副本,不论是由协作者还是更高级别的人安装的。

例如,可以使用 npm 安装 express 等命令直接从上游源安装包。 或者,包可以作为依赖项解析的一部分进行安装,因此安装 express 也会保存其依赖项,例如 接受

上游源为使用者和基础结构提供关键保障。 如果公共仓库出现停机、维护或暂时不可用时,您仍然可以从您的源中检索所需的包并继续进行开发。

注意

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

替代来自上游源的包

当在你的 feed 中启用上游源时,你无法发布在其中一个上游源中已存在的包版本。 例如,如果启用了 NuGet.org 上游源,则无法将 Newtonsoft.Json 10.0.3 发布到你的源,因为该版本在 NuGet.org 上已经可用。

若要从上游源重写包版本,请:

  1. 禁用相关的上游源。

  2. 将所需的包版本发布到源。

  3. 重新启用上游源。

此工作流可确保在维护上游源的完整性的同时发布所需的版本。

注意

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

上游源健康状况

如果上游源发生故障,使用相同协议的包的元数据就不能再刷新。 若要检查上游源的运行状况,请执行以下步骤:

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

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

  3. 选择齿轮图标以打开信息流设置,然后选择上游源。

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

  4. 如果发生任何故障,将显示警告消息。 选择 “失败 ”状态可查看详细信息,包括失败原因和解决问题的步骤。

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

注意

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