从缓存保存和恢复包¶
警告
此功能是实验性的,可能会发生重大更改。 有关更多信息,请参见Conan 稳定性部分。
通过 conan cache save
和 conan cache restore
命令,可以从 Conan 缓存中的一个或多个包创建 .tgz 文件,然后将这些包恢复到另一个 Conan 缓存中。 在某些情况下,这可能很有用
在持续集成中,特别是如果执行分布式构建,能够移动最近构建的临时包可能非常方便。 大多数 CI 系统都具有为此目的在作业之间传输文件的能力。 Conan 缓存不是并发的,有时对于并行作业,必须使用不同的缓存。
对于 air-gapped 设置,其中只能通过客户端传输包。
开发人员直接与其他开发人员共享一些包以进行测试或检查。
保存包的过程是使用 conan cache save
命令。 它可以像 conan list
命令一样使用模式,但它也可以像其他命令(例如 remove, upload, download
)一样接受包列表。 例如
$ conan cache save "pkg/*:*"
Saving pkg/1.0: p/pkg1df6df1a3b33c
Saving pkg/1.0:9a4eb3c8701508aa9458b1a73d0633783ecc2270: p/b/pkgd573962ec2c90/p
Saving pkg/1.0:9a4eb3c8701508aa9458b1a73d0633783ecc2270 metadata: p/b/pkgd573962ec2c90/p
...
# creates conan_cache_save.tgz
conan_cache_save.tgz
文件包含名为 pkg
(任何版本)的包,最后一个 recipe revision 以及所有包二进制文件的最后一个 package revision。 可以使用可选的 --file=xxxx
参数更改文件名。 一些重要的考虑因素
该命令保存缓存 “recipe” 文件夹的内容,其中包含子文件夹 “export”、“export_sources”、“download”、“source” 和 recipe “metadata”。
该命令保存 “package” 和 package “metadata” 文件夹的内容,但不保存二进制 “build” 或 “download”,这些被认为是临时文件夹。
如果用户不希望保存这些文件夹中的任何一个,则可以使用
conan cache clean
命令在保存之前将其清除。该命令保存缓存文件和工件以及元数据(revisions,package_id),以便能够在另一个缓存中还原这些包。 但是它不保存任何其他缓存状态,例如
settings.yml
,global.conf
,remotes
等。 如果保存的包需要任何其他特定配置,则应使用conan config install
进行管理。
我们可以将此 conan_cache_save.tgz
文件移动到另一个 Conan 缓存并将其还原为
$ conan cache restore conan_cache_save.tgz
Restore: pkg/1.0 in p/pkg1df6df1a3b33c
Restore: pkg/1.0:9a4eb3c8701508aa9458b1a73d0633783ecc2270 in p/b/pkg773791b8c97aa/p
Restore: pkg/1.0:9a4eb3c8701508aa9458b1a73d0633783ecc2270 metadata in p/b/pkg773791b8c97aa/d/metadata
...
如果恢复过程中,缓存中已存在要恢复的包,则恢复过程将覆盖现有包。
注意
最佳实践
保存和恢复包不能替代在 Conan 服务器存储库中正确存储(上传)包。 它仅旨在作为一种临时机制,在 CI 系统中,用于保存 air-gap 等,而不是作为长期存储和检索。
保存和恢复包不能替代正确备份服务器存储库。 推荐的实现 Conan 包长期备份的方法是使用一些服务器端备份策略。
此时,不能保证存储格式和序列化在未来具有防篡改性和稳定性。 它应该在相同的 Conan 版本中工作,但未来的 Conan 版本可能会破坏使用以前版本创建的存储格式。(这与上述不将其用作备份策略的建议一致)