软件包促销¶
软件包促销是推荐的 DevOps 实践,用于处理不同技术(当然也包括 Conan 软件包)中软件包的质量、成熟度或阶段。
软件包促销的原则是定义多个服务器软件包存储库,并根据阶段在存储库之间上传和复制软件包。例如,我们可以有两个不同的服务器软件包存储库,分别称为“testing”和“release”。
注意
最佳实践
强烈建议不要使用不同的
user/channel来表示成熟度。这在多存储库可能性出现之前的 Conan 1 早期曾被描述过,但不应再使用。软件包在管道和阶段之间应该是完全不可变的,软件包不能重命名或更改其
user/channel,并且从源代码重新构建以获得新的user/channel也是强烈不推荐的 DevOps 实践。
在这些存储库之间将存在一些质量门。在我们的例子中,一些软件包将被放入“testing”存储库,供 QA 团队进行测试,例如 zlib/1.3.1 和 openssl/3.2.2。
当 QA 团队测试并批准这些软件包后,它们就可以被提升到“release”存储库。基本上,促销是将软件包(包括所有工件和元数据)从“testing”存储库复制到“release”存储库。
实现和执行软件包促销有不同的方法。Artifactory 具有可用于移动单个文件或文件夹的 API。Conan extensions repository 包含 conan art:promote 命令,可用于将 Conan“软件包列表”从一个服务器存储库提升到另一个存储库。
如果我们有一个软件包列表 pkglist.json,其中包含上述 zlib/1.3.1 和 openssl/3.2.2 软件包,则命令将如下所示:
$ conan art:promote pkglist.json --from=testing --to=release --url=https://<url>/artifactory --user=<user> --password=<password>
请注意,conan art:promote 命令不适用于 ArtifactoryCE,需要 Artifactory 的 Pro 版本。在这些情况下,可以通过简单的下载+上传流程来实现促销功能。
# Promotion using Conan download/upload commands
# (slow, can be improved with art:promote custom command)
$ conan download --list=promote.json -r=testing --format=json > downloaded.json
$ conan upload --list=downloaded.json -r=release -c
从“testing”存储库促销到“release”存储库后,软件包将如下所示:
注意
最佳实践
在 Artifactory 等现代软件包服务器中,软件包工件是 **去重** 的,也就是说,当它们在不同位置(包括不同存储库)复制时,不会占用额外的存储空间。**去重** 是基于校验和的,因此系统也很智能,可以避免重复上传现有工件。这对于“促销”机制非常重要:该机制只复制一些元数据,因此速度非常快,并且存储效率很高。管道可以根据需要定义任意数量的存储库和促销,而无需担心存储成本。
在 JFrog 平台中,也可以使用 **Release Bundles** 进行促销。 Conan extensions repository 也包含一个用于生成 release bundle 的命令(可以使用 Artifactory API 进行促销)。