创建和托管您自己的 ConanCenter 二进制文件

在您的服务器上托管您需要的包的副本可以通过简单地从 ConanCenter 下载二进制文件然后上传到您自己的服务器来完成。然而,更好的做法是完全拥有完整的供应链并在您自己的 CI 系统中创建二进制文件。因此,在生产环境中使用 ConanCenter 包的推荐流程如下:

  • 创建 ConanCenter Github 仓库的一个分支:https://github.com/conan-io/conan-center-index

  • 创建一个您项目所需包和版本的列表。这个列表也可以添加到您的分支中并进行维护(团队需要时可以通过 PR 添加和删除包)。

  • 创建一个脚本,首先 conan export 您列表中的所有包,然后 conan create --build=missing 它们。不要为这些包添加 user/channel,直接使用例如 zlib/1.2.13 这种不带 user-channel 的形式要简单得多。user/channel 部分主要推荐用于您自己的专有包,而不是开源的 ConanCenter 包。

  • 将您构建的包上传到您自己的服务器(用于生产环境),而不是 ConanCenter。

这是基本的流程思路。我们将尽快添加示例和工具来进一步自动化此流程。

这个流程相对简单,并且有很多优点可以缓解之前描述的风险

  • 中央仓库的中断不会影响您的构建。

  • 中央仓库的更改不会破坏您的项目,您可以完全控制这些更改何时以及如何更新到您的包中(如下所述)。

  • 您可以自定义、调整、修复并完美控制使用的版本,并在几分钟而不是几周内发布修复。您可以应用在中央仓库中无法接受的自定义设置。

  • 您完全控制二进制文件的供应链,从源(recipe)到二进制文件,实际上消除了中央仓库的大多数潜在供应链攻击。

从上游更新

从上游 conan-center-index Github 仓库更新仍然是可能的,并且可以以完全受控的方式进行

  • 将上游 conan-center-index 主分支中的最新更改合并到您的分支中。

  • 如果需要,您可以检查和审计这些更改,分析差异(一些自动化工具来修剪您不使用的 recipe 的差异可能会有用)

  • 触发上述过程将有效地重建所需的新二进制文件。如果您的 recipe 未受更改影响,该过程将避免重新构建二进制文件(得益于 --build=missing)。

  • 您可以将包上传到辅助的“测试”服务器仓库。然后针对该测试服务器测试您的项目,以检查您的项目是否因新的 ConanCenter 包而损坏。

  • 一旦您验证新包一切正常,您可以将它们从辅助的“测试”仓库复制到您的主要生产仓库以开始使用它们。