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)方式处理响应。
上游源按以下顺序搜索源及其上游源来解决此不确定行为:
已发布到源的包。
已从上游源保存的包。
上游源提供的包。 每个上游源按源配置中列出的顺序进行搜索。
若要充分利用快速查找功能,建议在配置文件中仅包含一个源。
注意
不支持使用 NuGet 包资源管理器在上游源中搜索包。
从上游源保存包
为源启用上游源并从上游源安装包时,该包的自动副本将保存到源。 这种做法可增强下载性能并节省网络带宽。
例如,可以使用 npm 安装 express 之类的命令直接从上游源安装包。 或者,包可以作为依赖项解析过程的一部分进行安装。 在后一方案中,安装 express 也会保存其依赖项,例如 接受。
注意
仅 npm 包支持自定义上游源。
替代来自上游源的包
启用上游源时,请务必注意,无法发布上游源中已存在的包版本。 例如,如果启用 NuGet.org 上游,将无法发布 Newtonsoft.Json 10.0.3 包,因为该确切版本已存在于 NuGet.org 中。
如果需要发布已存在于某个上游源中的包版本,则必须执行以下步骤:
- 禁用相关的上游源。
- 发布包。
- 重新启用上游源。
注意
包版本是不可变的。 即使禁用或删除上游源,保存的包仍保留在源中。
上游源运行状况
如果源的上游源发生故障,则无法再刷新相同协议的包的元数据。 若要检查上游源的运行状况,请执行以下步骤:
登录到 Azure DevOps 组织,并导航到你的项目。
选择“ 项目”,然后从下拉菜单中选择源。
选择齿轮图标 以导航到 源设置,然后选择 上游源。
如果发生任何故障,将显示警告消息。 单击 “失败 ”状态将提供其他详细信息,包括失败的原因以及有关如何解决失败的说明。
注意
对于公共注册表(如 NuGet.org),包推送到公共注册表的时间以及下载包的时间之间有 3-6 小时的延迟。 此延迟取决于作业计时和数据传播。 但是,当上游源是 Azure Artifacts 源时,延迟通常不超过几分钟。
脱机上游源
上游源是消费者和基础结构的宝贵保障,可防范意外中断。 从上游源安装包时,该包的副本将保存到源中。 如果上游源遇到停机、维护或暂时不可用的情况,仍可以从源检索必要的包并继续开发。
常见问题
问:即使可以在源的上游之一看到,也找不到我的包?
答:上游源中的包在发布后不久就可在下游源中使用。 但是,只有在包保存到源后,该包才对读取者可见。 当具有 源和上游读取者(协作者) 或更高权限的用户在下游源中安装版本时,将保存包。 这会触发下游从上游保存包的副本,之后该副本将永久保存并在下游可供所有读取器使用。 这是当包版本在 Web UI 的包版本部分中可见时。
问:什么是源视图?
答:视图允许开发人员有选择地共享已测试和验证的包版本的子集,不包括仍在开发或尚未满足质量标准的任何包。 有关详细信息,请参阅 什么是源视图。
问:找不到要配置为上游源的源?
答:确保源的所有者将视图共享为上游源。
问:具有 源读取者 角色的用户是否可以从上游源下载包?
答: 不是。 Azure Artifacts 源中具有 源读取者 角色的用户只能下载已保存到源的包。 当源和上游读取者(协作者)、源发布者(参与者)或源所有者从上游安装这些包时,包将保存到源。
问:当用户删除或取消发布从上游源保存的包时,会发生什么情况?
答:包无法从源下载,版本号将永久保留。 此外,将不再从上游源保存包。 包的早期和更高版本将不受影响。
问:当用户弃用从上游源保存的包时会发生什么情况?
答:当用户弃用包时,会将警告消息添加到包的元数据中,每当从源查看或安装包时,都会显示该消息。