有没有办法让詹金斯的工作互相排斥?

时间:2011-09-13 17:35:26

标签: mutex jenkins

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

3 个答案:

答案 0 :(得分:22)

您需要Throttle Concurrent Builds插件,它允许您定义全局和每节点信号量。

锁定和锁存正在deprecated,有利于Throttle Concurrent构建。

答案 1 :(得分:4)

我已经尝试了locks & latches插件和port allocator插件,以实现您想要做的事情。对我来说都不可靠。锁和闩锁工作一段时间,但我偶尔会挂起工作。除非你有多个jenkins节点,否则使用端口分配器作为黑客将会工作,但配置开销有点高。我最终解决的是另一个黑客,但它可靠地运行并使用核心Jenkins的东西(没有插件):

  • 创建一个与主节点在同一个盒子上运行的从节点(如果你有很多盒子的话,可以不运行)
  • 给这个奴隶一个执行者(密钥)
  • 将必须不一起运行的2(或n)个作业绑定到此新的从属节点
  • 可选择将奴隶的使用设置为“仅限绑定的作业”,如果它们碰巧在新的奴隶上运行会搞砸其他作业

由于slave只有一个执行程序,因此绑定它的作业永远不会一起运行。

答案 2 :(得分:1)

如果您将数据库视为只能以独占方式使用的共享资源,则适合Lockable resources plugin的用例。

它正在积极地开发和改进,并且用途广泛。