【问题标题】:Google Compute Engine: Caching when running Builds on Preemptible VMsGoogle Compute Engine:在抢占式虚拟机上运行构建时进行缓存
【发布时间】: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)会更容易实施。
  • 不确定将存储桶安装到 GCE 映像中是什么意思。您可以使用 Cloud Storage FUSE 挂载带有 GCE 实例的存储桶。但是,您正在查看使用代理/CDN 的解决方案,您可以提交功能请求here
  • 如果您的真正问题是您的实例在完成任务之前被抢占,这意味着 Google 资源有限。选择不同的机器类型(更大的实例)或更改区域。还可以考虑使用标准实例(不可抢占)。最佳实践:创建具有最小化下载/安装设置所需的一切的机器映像。如果这无法实现,那么抢占式实例对您来说可能不是一个好的用例。

标签: jenkins caching google-compute-engine


【解决方案1】:

CDN 会缓存 HTTP(S) 负载平衡内容,因此不确定它是否适合您的用例。就延迟而言,代理可能是一种可能的解决方法,但它也可能取决于您的设计和用例。但是,我查看了this,他们建议使用谷歌云存储(GCS)。如果您在与 VM 相同的区域使用 GCS,这似乎有助于加快进程。

【讨论】:

    猜你喜欢
    • 2016-10-17
    • 2020-10-25
    • 1970-01-01
    • 2018-12-27
    • 2020-01-29
    • 2020-09-13
    • 2021-04-05
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多