包流水线:多配置¶
在上一节中,我们仅构建了一个配置。本节将介绍需要构建多个配置的情况。为了方便起见,我们将在此处使用 Release
和 Debug
配置,因为这样更容易理解,但在实际情况下,这些配置将更像是 Windows、Linux、OSX,为不同的架构构建,交叉构建等。
让我们开始清理缓存
$ conan remove "*" -c # Make sure no packages from last run
我们将在我们的计算机上按顺序为 2 个配置创建包,但请注意,这些通常会在不同的计算机上运行,因此 CI 系统通常会并行启动不同配置的构建。
$ cd ai # If you were not inside "ai" folder already
$ conan create . --build="missing:ai/*" -s build_type=Release --format=json > graph.json
$ conan list --graph=graph.json --graph-binaries=build --format=json > built.json
$ conan remote enable packages
$ conan upload -l=built.json -r=packages -c --format=json > uploaded_release.json
$ conan remote disable packages
我们做了一些更改和额外的步骤
第一步与上一节中的步骤类似,一个
conan create
,只是为了清楚起见,显式指定我们的配置-s build_type=Release
,并将conan create
的输出捕获到一个graph.json
文件中。第二步是从
graph.json
创建一个built.json
包列表 文件,其中包含需要上传的包,在本例中,仅上传从源代码构建的包 (--graph-binaries=build
)。这样做是为了提高效率并加快上传速度。第三步是启用
packages
仓库。之前未启用是为了保证所有可能的依赖项仅来自develop
仓库。然后,我们将
built.json
包列表上传到packages
仓库,创建uploaded_release.json
包列表,其中包含包的新位置(服务器仓库)。最后,我们将再次禁用
packages
仓库
同样,Debug 构建将执行相同的步骤
$ conan create . --build="missing:ai/*" -s build_type=Debug --format=json > graph.json
$ conan list --graph=graph.json --graph-binaries=build --format=json > built.json
$ conan remote enable packages
$ conan upload -l=built.json -r=packages -c --format=json > uploaded_debug.json
$ conan remote disable packages
当 Release 和 Debug 配置都成功完成时,我们将在仓库中拥有这些包
当 ai/1.1.0
的所有不同二进制文件都正确构建后,package pipeline
可以认为其工作已成功,并决定提升这些二进制文件。但是,还需要进一步的包构建和检查,因此 package pipeline
可以将它们提升到 products
二进制仓库,而不是将它们提升到 develop
仓库。由于所有其他开发人员和 CI 都使用 develop
仓库,因此在此阶段也不会有人受到影响。
# aggregate the package list
$ conan pkglist merge -l uploaded_release.json -l uploaded_debug.json --format=json > uploaded.json
$ conan remote enable packages
$ conan remote enable products
# Promotion using Conan download/upload commands
# (slow, can be improved with art:promote custom command)
$ conan download --list=uploaded.json -r=packages --format=json > promote.json
$ conan upload --list=promote.json -r=products -c
$ conan remote disable packages
$ conan remote disable products
第一步使用 conan pkglist merge
命令合并来自 “Release” 和 “Debug” 配置的包列表,并将其合并为一个 uploaded.json
包列表。此列表将用于运行提升。
在本示例中,我们使用较慢的 conan download
+ conan upload
提升。使用 conan art:promote
扩展命令可以更有效率。
运行提升后,我们将在服务器中拥有以下包
总结
我们构建了 2 个不同的配置,
Release
和Debug
(可能是 Windows/Linux 或其他),并将它们上传到packages
仓库。当所有配置的所有包二进制文件都成功构建后,我们将它们从
packages
提升到products
仓库,以使它们可用于products pipeline
。包列表 在包创建过程中被捕获,并合并为一个以运行提升。
还有一个我们尚未考虑的方面,即 ai/1.1.0
的依赖项在构建过程中发生更改的可能性。请转到下一节,了解如何使用锁定文件来实现更一致的多配置构建。