【问题标题】:Is there a way to make jobs in Jenkins mutually exclusive?有没有办法让詹金斯的工作相互排斥?
【发布时间】:2011-09-13 17:35:26
【问题描述】:

我在 Jenkins 有一些工作,使用 Selenium 通过网站的前端修改数据库。如果其中一些作业同时运行,可能会导致由于脏读而导致的错误。有没有办法强制 Jenkins 中的某些工作无法同时运行?我宁愿不必在数据库上放置或获取锁,它可以被任意数量的同时进行测试的用户读取或修改。

【问题讨论】:

    标签: mutex jenkins


    【解决方案1】:

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

    锁定和闩锁正在 deprecated 支持 Throttle Concurrent 构建。

    【讨论】:

    • 我没有注意到 Lock & Latches 插件上已弃用的警告,我会用这个新插件更新我的 Jenkins,谢谢。
    【解决方案2】:

    我已经尝试了locks & latches 插件和port allocator 插件作为实现您想要做的事情的方法。两者都不适合我。锁和闩锁有时会起作用,但我偶尔会被吊死。除非您有多个 jenkins 节点,否则将端口分配器用作 hack 将起作用,但配置开销有点高。我最终决定的是另一个 hack,但它工作可靠并且使用核心 Jenkins 东西(无插件):

    • 创建一个与主节点在同一个盒子上运行的从节点(或者不创建,如果你有很多盒子)
    • 给这个奴隶一个单一的执行者(key)
    • 将不能一起运行的 2 个(或 n 个)作业绑定到这个新的从节点
    • 如果碰巧在新的从站上运行其他作业会搞砸您的其他作业,则可选择将从站的使用设置为“仅绑定作业”

    由于从属服务器只有一个执行程序,与其相关的作业永远不会一起运行。

    【讨论】:

    • 太棒了!对于像我这样的初学者来说只有一个注意事项:要绑定作业,请在作业配置中使用“限制可以运行此项目的位置”选项。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      相关资源
      最近更新 更多