我的 Jenkins 工作中有几个集成测试。它们在多台应用服务器上运行,我想确保在一台应用服务器上同时只运行一个集成测试作业。
我需要在我的作业中使用标签或变量之类的东西来创建一组作业,然后配置在该组中只能同时运行一个作业的逻辑。
我可以为此使用排除插件吗?有没有人有这方面的经验?
我的 Jenkins 工作中有几个集成测试。它们在多台应用服务器上运行,我想确保在一台应用服务器上同时只运行一个集成测试作业。
我需要在我的作业中使用标签或变量之类的东西来创建一组作业,然后配置在该组中只能同时运行一个作业的逻辑。
我可以为此使用排除插件吗?有没有人有这方面的经验?
使用Throttle Concurrent Builds Plugin。它取代了 Locks and Latches 插件,并提供了限制为特定标签运行的作业数量的功能。
例如:您创建一个项目类别“集成测试服务器 A”并将作业与其关联,最大并发计数为 1,以及第二个“集成测试服务器 B”标签并将其他作业与其关联,这两个类别将只运行单个并发构建(假设您已将最大作业计数设置为 1),并且该类别中的其他作业将排队,直到“锁定”清除。
使用这种方法,您不必限制任何特定 Jenkins 实例上可用的执行器数量,并且将来可以轻松添加更多从属服务器,而无需重新配置所有作业。
如果我理解正确,您有一个应用程序服务器池,您的测试运行在哪个服务器上并不重要。他们只需要成为该服务器上的唯一测试。
我还没有看到可以做到这一点的插件。但是,您可以轻松绕过它。您需要为每个应用程序服务器配置一个从属服务器。(1 slave = 1 app server) 你需要为所有的slave分配相同的标签,每个slave只能有一个executor。然后,您分配运行集成测试的作业,以在该标签上运行。Jenkins 会将作业分配给具有该标签的下一个可用从站(或节点)。
请记住,您可以在同一块硬件上运行多个从属服务器,甚至一个主服务器和一个从服务器也可以在同一台服务器上共存。
您是否在 Jenkins -> Manage Jenkins -> Configure system 中检查了以下参数
# of executors
上述参数可帮助您限制一次要执行的作业数。
Jenkins 执行器是允许构建在节点/代理(例如构建服务器)上运行的基本构建块之一。将执行程序视为单个“进程 ID”,或 Jenkins 在您的计算机上执行以运行构建的基本资源单元。有关执行器、节点/代理以及 Jenkins 的其他基础部分的更多详细信息,请参阅 Jenkins 术语。
您可以在 Remoting Best Practices 页面的执行者数量部分找到有关如何为给定代理设置 Jenkins 执行者数量的信息。来源 - https://support.cloudbees.com/hc/en-us/articles/216456477-What-is-a-Jenkins-Executor-and-how-can-I-best-utilize-my-executors