我们的 Jenkins 管道将有不同的并发作业运行 conan install
和 conan export-pkg
更新本地缓存。
我们目前在/home/jenkins/conan 中为 jenkins 用户提供了一个本地缓存。多个用户登录到 Jenkins,因此一个用户的行为会影响其他用户。
当涉及到本地缓存时,使用 Jenkins 和 Conan 的首选方式是什么?每个 Jenkins 作业是否应该通过设置 CONAN_USER_HOME=$WORKSAPCE/conan 或类似的东西来获得自己的本地缓存?
最佳答案
Conan 缓存不是为并发而设计的。如果一个作业正在创建和构建一个包,而同时另一个作业试图使用该包,则可能存在竞争条件,并且作业可能会意外失败并出现未定义的行为。因此并发使用是不允许的,这排除了为通用作业共享缓存,除非您的使用模式受到严格控制。
对于大多数情况,最好通过 CONAN_USER_HOME
环境变量为每个作业设置一个干净的缓存。
可以做几件事来加快构建速度:
- 有一个服务器,例如靠近 CI 机器的 Artifactory,其中包含用于依赖项的预编译二进制文件。
- 有一个新的实验download cache这是并发的,可以在多个 CI 作业之间共享。它可以有很大的好处,特别是在网络速度慢的情况下。
关于jenkins - 与 Jenkins 一起使用时的 Conan 本地缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62288299/