引言

在快速发展的软件开发领域,可重复性和可追溯性变得越来越重要。但是,当您依赖的第三方源突然不可用时会发生什么?借助新的Conan源备份功能,您可以确保您的构建不仅可重复,而且能够抵御外部依赖项不确定性的影响。

借助此功能,您可以配置Conan,以便当配方下载库的源代码时,它允许您从基础设施中的文件服务器获取源代码。这对开发者来说是完全透明的,并且可以设置为仅在原始源代码的URL失败时作为最后手段使用。

使用此功能的一些优势包括

  • 可重复性:确保构建的长期可重复性。
  • 可追溯性:保留下载文件的来源记录。
  • 鲁棒性:将源代码存储在您自己的基础设施中,减少对第三方服务的依赖。
  • 改进速度:与从外部服务器获取相比,在内部托管源文件可以提高下载速度。
  • 成本效益:将源代码置于同一网络中可以减少出口费用,从而节省网络成本。

在这篇文章中,我们将向您展示如何充分利用源备份功能,并以我们在Conan Center的经验为例进行说明。这将使您清楚地了解如何将此功能无缝集成到您的工作流程中,以提高可靠性和效率。

Conan团队如何在Conan Center中使用此功能

此功能已在Conan Center等生产环境中使用了一段时间。Conan Center托管了超过6000个不同的引用,以及数千个不同的源代码来源。因此,它极易受到某些源代码来源可能不可用甚至消失的情况的影响。在这些情况下,它成为在CI服务器内部使用Conan源备份功能的理想生产环境。

在开发者端使用此功能

要使用此功能,第一步是拥有一个文件服务器。在Conan Center,我们使用一个通用的Artifactory存储库,它与我们的基础设施完美契合,但您可以使用任何其他支持HTTP PUTGET方法的文件服务器。首先需要在Conan客户端的global.conf文件中配置服务器URL

# global.conf
core.sources:download_urls=["origin", "https://url/for/my-backup-sources-download-server/"] 

如所示,可以提供多个不同的文件服务器列表,每次在配方中遇到对get()download()的调用时,Conan都会参考此列表。为了指定原始源,我们使用保留字origin。因此,此配置将首先尝试在原始服务器上查找源代码,如果失败,则将回退到我们的服务器(您可以按优先级顺序在配置中列出它们)。例如,在Conan Center,我们使用此服务器:https://c3i.jfrog.io/artifactory/conan-center-backup-sources/。访问它后,我们可以查看有关不同源代码副本的信息

Configure Conan path

请记住,如果需要服务器凭据,则应使用sources_credentials.json配置文件进行配置。另一个关键点是,为了激活此功能,必须定义在get()download()方法中使用的文件的sha256(如上图所示,包的源代码保存在以二进制哈希作为名称的文件中,并附带一个元数据.json文件)。

通过提供的说明,开发者或持续集成系统将拥有足够的信息来利用此功能下载源代码。现在,我们将研究客户端所需的配置,以方便将这些源代码上传到服务器。

配置源代码上传

源代码上传通常由CI服务器执行。例如,在Conan Center,源代码的备份在每次新版本的PR通过所有检查(变为绿色)时都会上传。如果在global.conf文件中定义了以下配置,则此上传将在conan upload期间透明地执行。

# global.conf
core.sources:upload_url=https://url/for/my-backup-sources-upload-server 

需要注意的是,上传服务器可能与下载服务器不同。

此外,在某些情况下,可能需要从备份源代码上传中排除某些来源(假设这是您不希望所有用户都能访问的代码)。在这种情况下,可以使用以下配置在进行调用时跳过它们,并且配置中列出的任何以这些URL开头的URL都将被跳过

# global.conf
core.sources:exclude_urls=["https://url/mycompanystorage/", "https://url/mycompanystorage2/"] 

要进一步了解备份源功能,您可以查看Conan文档

结论

Conan的源备份功能是确保构建的长期可重复性和可追溯性的强大工具。通过采取一些简单的步骤来配置此功能,您可以保护您的项目免受依赖第三方源代码存储库带来的不确定性的影响。