如何为分支优化 Jenkins 工作区

Posted

技术标签:

【中文标题】如何为分支优化 Jenkins 工作区【英文标题】:How to optimize Jenkins workspaces for branches 【发布时间】:2019-10-26 09:17:29 【问题描述】:

我们有一个在 GIT 中受修订控制的 c++ 项目。我们使用 Jenkins 作为我们的 CI,并且由于我们的系统中有相对大量的分支,我们在构建时间方面遇到了一些问题。由于某些分支包含基类接口中的更改,因此从一个分支切换到另一个分支时正在重建整个项目。通常,一个开发人员不需要经常切换——但是两个开发人员可能在两个不同的分支上工作,具有不同的接口——这使得 Jenkins 构建的生活变得困难。

据我了解,配置工作区有两个选项:为所有分支设置共享工作区,或为每个分支设置不同的工作区。虽然后一种选择在磁盘空间方面过于昂贵并且需要为每个分支重新克隆,但前一种选择使 Jenkins 在每次推送时都重建。

我想要第三个选项:所有分支共享相同的工作区集但有优先级:如果分支在不久的过去使用了某个工作区,那么我们希望它再次使用它(以减少构建时间) - 如果没有分支最后使用的工作区,那么 CI 将使用最近最少使用的工作区。这样我们就不会破坏磁盘使用率并获得更出色的性能。

问题是 - Jenkins 中是否存在工具/插件可以允许具有上述使用工作区的逻辑?是否可以通过插件或 groovy 脚本在 Jenkins 中开发这样的逻辑?

【问题讨论】:

【参考方案1】:

使用共享库步骤,您可以实现您要求确定工作区目录的那种逻辑。但是,由于并非所有分支都需要一直构建,我强烈建议您使用第二个建议:您可以使用 multi-branch plugin 并将其配置为根据模式过滤分支。这样合并的分支应该被删除以节省空间(您也可以重命名它们或删除它们的Jenkinsfile。)

如果您仍想创建自己的工作空间分配机制,您将必须知道如何枚举它们、如何使每个目录独占某个运行以及如何重用它们。迟早你会发现这不值得你花时间,你最好投资于重用以前分支构建的工件而不是整个构建本身,所以这是你的第四个选择:)

【讨论】:

以上是关于如何为分支优化 Jenkins 工作区的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins - 如何为(a)特定工作保留执行者

jenkin的安装

如何为 Jenkins 管道中的失败阶段实施重试选项?

如何为启用 2FA 的 github 帐户配置 Jenkins?

SBT 如何为特定的 groupid 禁用 Ivy 缓存

Jenkin-Jenkins忘记密码