我们有一个C ++项目,该项目在GIT中受版本控制。我们使用Jenkins作为CI,并且由于我们的系统中有大量分支,因此在构建时间上遇到了一些问题。由于某些分支在基类接口中包含更改,因此从一个分支切换到另一个分支时,整个项目都将被重建。通常,开发人员不需要经常切换-但是两个开发人员可以在具有不同接口的两个不同分支上工作-这使Jenkins构建工作变得很艰难。
据我了解,有两个选项可配置工作空间:为所有分支设置共享工作空间,或为每个分支设置不同的工作空间。尽管后一种方法在磁盘空间上过于昂贵,并且需要为每个分支重新克隆,但前一种方法使Jenkins在每次推送时都可以重新构建。
我想要第三个选项:所有分支共享相同的工作空间集,但具有优先级:如果分支在不久的将来使用了某个工作空间,那么我们希望它再次使用它(以减少构建时间)-如果没有分支最后使用的工作空间,则CI将使用最近最少使用的工作空间。这样,我们就不会浪费磁盘使用量并获得更高的性能。
问题是-Jenkins中是否存在可以允许使用工作区的上述逻辑的工具/插件?是否可以通过插件或groovy脚本在Jenkins中开发这种逻辑?
答案 0 :(得分:0)
使用共享库步骤,您可以实现您要求的用于确定工作区目录的逻辑。但是,由于并非所有时间都需要构建所有分支,因此我强烈建议您使用第二个建议:您可以使用multi-branch plugin并将其配置为根据模式过滤分支。这样,应该删除合并的分支以保留空间(您也可以重命名它们或删除其Jenkinsfile
。)
如果您仍然想建立自己的工作区分配机制,则必须知道如何枚举它们,如何使每个目录在特定运行中独占以及如何重用它们。迟早您会发现这不值得花时间,您最好投资重用分支的先前版本中的构件,而不是整个分支本身,所以这是您的第四个选择:)