【发布时间】:2019-05-06 20:37:16
【问题描述】:
我们刚刚通过 google-compute-engine-plugin 将 Jenkins 构建从 24/7 运行的构建代理迁移到使用 GCE Preemtible VM。
现在我们的构建需要更长的时间,因为所有构建几乎每次都需要解析所有依赖项(Docker 映像、Maven 工件、NPM 包等)。 VM 上的缓存不再有效,因为几分钟后 VM 会停止。
是否有适用于不同用例(Docker、Maven、NPM)的快速解决方案或最佳实践?
例如
- 我能否启用与 Google Cloud 中的虚拟机“更接近”(就网络延迟而言)的代理或 CDN?
- 或者安装一个存储桶来保存图像、本地 Maven 存储库和 NPM 缓存会加快速度吗?
- 还有其他想法吗?
【问题讨论】:
-
CDN 会缓存 HTTP(S) 负载平衡内容,因此不确定它是否适合您的用例。就延迟而言,代理可能是一种可能的解决方法,但它也可能取决于您的设计和用例。但是,我查看了this,他们建议使用谷歌云存储(GCS)。如果您在与 VM 相同的区域使用 GCS,这似乎有助于加快进程。你试过 GCS 吗?
-
@RahiR 使用 GCS 似乎符合我的“安装桶......”方法。我还没有尝试过。很高兴知道它有一个 Jenkins 插件。 OTOH 我宁愿将存储桶安装到 GCE 映像中(而不是 Jenkins 作业),因为编辑每个构建作业以使用 GCS 作为缓存会导致很多工作。全局(与构建作业无关)解决方案(例如 Proxy/CDN)会更容易实施。
-
如果您的真正问题是您的实例在完成任务之前被抢占,这意味着 Google 资源有限。选择不同的机器类型(更大的实例)或更改区域。还可以考虑使用标准实例(不可抢占)。最佳实践:创建具有最小化下载/安装设置所需的一切的机器映像。如果这无法实现,那么抢占式实例对您来说可能不是一个好的用例。
标签: jenkins caching google-compute-engine