(主/从术语现在是控制器/代理)
我正在学习Jenkins构建自动化,我很难理解控制器/代理结构是如何工作的。
在我的设置中,有一个控制器Jenkins节点在要构建的源代码的同一台计算机上。源代码由千兆字节的数据组成(包括源代码、编译器和一些资源数据)。准确地说,“编译器”是Unity3D编辑器(它本身由几千兆字节的数据组成),“源代码”是Unity项目的脚本和资产。
Jenkins作业应该在“源代码”上运行“编译器”并生成一些输出。在控制器/代理配置中,该过程应该在多个代理节点(Jenkins代理)上并行化。
现在我想明白的是:如果我要在多台机器上设置多个代理节点(Jenkins代理),我是否需要所有这些代理机器上都有完全相同的“编译器”和“源代码”,Jenkins才能正常工作?
一方面,根据我的阅读,似乎没有必要这样做,代理机器只需要设置一个“Jenkins代理”就可以正常工作。代理只是“神奇地”知道远程控制器机器上的“编译器”和“源代码”,而不需要安装“编译器”或同步“源代码”。
然而,另一方面,我无法想象这是如何可能做到的千兆字节的数据涉及,以至于我困惑于我的理解是否正确的阅读。即使“源代码”可以转移“块”的“编译器”必须是完全可执行的,不能转移块对吗?
任何解释都将不胜感激。
1条答案
按热度按时间c8ib6hqw1#
我也一直在学习Jenkins的游戏开发,据我所知,代理的第一次使用是在分离调度和建设。这个想法是你有一个控制器,它可以运行在任何地方,一个或多个代理运行在不同的硬件上。这样,当一个代理工作,控制器不会失去资源来做它的工作。你可能只有一个代理,或者一台Windows机器和Mac,分别为各自的平台或任何数量的代理构建。重点不是让控制器陷入困境。
AFAIK,Jenkins管道添加了并行性,但它是可选的,没有任何魔力。对于Unreal,有一个产品Incredibuild可以进行分布式编译,但Jenkins不会处理。粗略搜索表明Unity没有构建支持分布式编译的方法。
注意事项:我还没有做过这些,但是我认为如果你有一些预处理步骤,比如对所有纹理进行下采样,并行代理会很有用。你可以让并行操作在多个代理之间处理不同的文件夹,当它们都完成时,它会回到一个非并行的构建。同样,这不是一个很好的例子,但我认为这取决于您是否能够确定您的流程中是否存在可以并行处理的部分。