Jenkins 最佳实践 - 在多个从站上安装 nfs 工作区

Posted

技术标签:

【中文标题】Jenkins 最佳实践 - 在多个从站上安装 nfs 工作区【英文标题】:Jenkins best practice - nfs mount workspace on multiple slaves 【发布时间】:2014-05-07 15:56:36 【问题描述】:

我很想知道是否有人以前做过类似的事情,如果有,结果如何。我们有一个拥有大约 15 个奴隶的​​ Jenkins 农场。现在每个从属服务器都有自己的本地磁盘用于工作空间,但我们的工作并不依赖于特定的从属服务器。这意味着如果 Job 1 最初在 Slave1 上运行,但随后不得不切换到 Slave2,则它必须再次拉取代码。就下载时间和磁盘空间而言,这似乎是一种浪费,因为代码现在在两个从属服务器上重复。

在所有从属设备上挂载一个共享的 NFS 驱动器(或其他一些共享驱动器)以便作业可以在任何从属设备上运行,但磁盘对所有人来说都是相同的,这是一个好主意吗?明显的风险是延迟,但是否还有其他与此相关的风险?

谢谢!

【问题讨论】:

【参考方案1】:

鉴于这些天磁盘空间如此便宜和快速,我真的怀疑您是否会从您的计划中看到任何好处。

相反,我可以想到几个缺点:

NFS 挂载的磁盘空间较慢 NFS 挂载的磁盘空间可能更加不可靠(网络必须工作,服务器必须工作。) 无法告诉 Jenkins 不同从属服务器上的磁盘实际上是共享的。 Jenkins 可能会决定清理 slave1 上的工作空间,同时它正在使用工作空间在 slave2 上构建。

如果您担心结帐时间,有一些方法可以优化:

您不必在构建结束时删除工作区。如果 Jenkins 发现它已经有一个工作空间,它将尝试在下一次构建中重用它。 配置 SCM 以更新和清理现有工作区,而不是每次都检查一个干净的副本。

根据您使用的版本控制系统,执行这些操作的详细信息会有所不同。您还可以使用其他技巧:浅克隆、使用参考存储库、...

我很确定您可以不考虑结帐时间。磁盘空间使用更难消除,但通常磁盘足够便宜。如果你有小而快的 SSD 磁盘,你通常可以在构建结束时从工作区清理生成的文件以节省空间。 (我的工作正是这种情况。)

【讨论】:

根据大约 6 个月的数据,我们发现本地磁盘的性能要好得多。我们测试的 NAS 磁盘在负载下表现不佳。【参考方案2】:

假设您的网络良好并且您的挂载设置正确,我认为这种方法没有任何问题。正如您所建议的,您将节省时间,但需要支付网络传输费用。 我建议你和一些奴隶一起尝试一下,做一些基准测试。

我希望这会有所帮助。

【讨论】:

【参考方案3】:

我能想到的唯一缺点是,如果您想同时在多个从站上构建相同的作业(不是 Jenkins 默认行为,但这是可能的)。在这种情况下,您将使用同一个工作区目录进行多个构建。

【讨论】:

【参考方案4】:

主机 A 和主机 B 的 Jenkins 加密可能不同,因此凭据会损坏

【讨论】:

以上是关于Jenkins 最佳实践 - 在多个从站上安装 nfs 工作区的主要内容,如果未能解决你的问题,请参考以下文章

最佳实践———Jenkins对离线和插件安装慢解决方法

Jenkins 最佳实践课程2021版全新升级

Jenkins最佳实践

systemd 和 Jenkins CI 的 Java 可执行 jar 位置最佳实践?

使用 Nx 在 Jenkins 中进行 CI/CD 的最佳方式

基于K8s插件版的Jenkins动态节点实践内含最佳实践