什么是上游源?

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

Azure Artifacts 上游源使开发人员能够方便地将来自各种源的包存储在单个源中,包括发布包以及从外部源或公共注册表(如 NuGet.org)安装的包,npmjs.com。 启用上游源后,从上游源安装的任何包都会自动保存到您的订阅源中。

注意

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

为何使用上游源?

启用上游源为在单个源中管理产品的依赖项提供了几个好处:

  • 简单性:将所有包存储在单个源中可以简化配置文件,例如 NuGet.config、npmrc 或 settings.xml。 只需在配置文件中输入一个信息,就能减少出错的几率并简化设置。

  • 一致的构建:你的源会按照规定的顺序解析包请求,从而确保更可预测、更可靠的构建。

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

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

包使用者的最佳做法

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

1. 在配置文件中使用单个源

为了使源提供确定性还原,请确保配置文件(如 nuget.config 或 npmrc)只引用一个已启用上游源的源。

  • 示例

    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 /> 可确保忽略在更高级别的配置文件中指定的所有其他包源。

2. 有意地排列上游数据源

如果仅使用公共注册表(如 NuGet.org 或 npmjs.com),上游源的顺序并不重要。 向源发出的请求遵循 搜索顺序 部分中概述的顺序。

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

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

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

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

1.使用默认视图

所有新创建的订阅源的默认视图为 @Local,它包含发布到您订阅源的所有包以及从上游订阅源保存的包。

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

2.构造包图

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

搜索顺序

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

上游源通过强制实施以下结构化搜索顺序来消除这种不确定性:依次搜索信息源及其上游源。

  1. 直接发布到源的包。

  2. 从上游源保存的包。

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

注意

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

从上游源保存包

在你的源上启用上游源时,Azure Artifacts 会自动保存协作者或更高权限用户从上游安装的任何包的副本。

例如,可以使用 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 源时,延迟通常不超过几分钟。

常见问题

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

答:上游源的包在发布后,很快就可以在下游源中使用。 但是,只有将包保存到源后,读者才能看到它。 当具有源和上游读取者(协作者)或更高权限的用户在下游发布源中安装该版本时,包将被保存。 这会触发下游从上游保存包的副本,之后该副本将永久保存并在下游可供所有读取器使用。 这是当包版本在 Web UI 的包版本部分中可见时。

问:什么是源视图?

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

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

答:确保源的所有者作为上游源共享了视图。 有关详细信息,请参阅将不同组织中的源添加为上游源

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

答: 不是。 在 Azure Artifacts 源中具有源阅读器角色的用户只能下载已保存到源中的包。 当 订阅源和上游读取者(协作者)订阅源发布者(贡献者)订阅源所有者 从上游安装这些包时,包将被保存到订阅源中。

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

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

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

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