2011-09-13 95 views
29

我在Jenkins有一些工作,使用Selenium通过网站的前端修改数据库。如果其中一些作业同时运行,则可能导致由于脏读导致的错误。有没有办法迫使詹金斯的某些工作无法同时运行?我宁愿不必在数据库上放置或拾取锁,这可以通过任何数量的正在测试的用户读取或修改。有没有办法让詹金斯的工作互相排斥?

回答

21

你想要Throttle Concurrent Builds插件,它可以让你定义全局和每个节点的信号量。

锁定和锁存正在deprecated支持油门并发构建。

+0

我没有注意到Lock&Latches插件上的弃用警告,我将用这个新插件更新我的Jenkins,谢谢。 –

4

我试过locks & latches插件和port allocator插件作为实现你想要做的事情的方法。对我来说都没有可靠的工作。一些时间锁定锁&,但我偶尔会挂起工作。使用端口分配器作为黑客将工作,除非你有多个jenkins节点,但配置开销很高。我已经在最终结算是另一个黑客,但它工作可靠,使用核心詹金斯的东西(无插件):

  • 建立在相同的机器上运行的主从节点(或没有,如果你有大量的箱)
  • 给这从一个单一的执行(关键)
  • 领带必须没有到这个新的从节点
  • 选择设置从服务器的使用情况,以“只绑作业同时运行2个(或n)工作'如果它碰巧在新的奴隶上运行,它会搞砸你的其他工作

由于奴隶只有一个执行者,与其相关的工作永远不能一起运行。

+2

太棒了!对于像我这样的初学者来说,只需要注意一件事:绑定作业,在作业配置中使用“限制可以运行此项目的位置”选项。 – Linulin