【问题标题】:How can I prevent two Jenkins projects/builds from running concurrently?如何防止两个 Jenkins 项目/构建同时运行?
【发布时间】:2012-04-24 08:06:19
【问题描述】:

我有两个共享数据库的 Jenkins 项目。它们不能同时运行。严格来说,除了非并发之外,它们之间没有特别的依赖关系,但目前我通过在另一个“下游”运行一个“下游”来部分管理这个约束。这在大多数情况下都有效,但并非总是如此。如果在第二个运行时发生源代码控制更改,第一个将再次启动,并且它们将同时运行并且可能都失败了。

这与How to prevent certain Jenkins jobs from running simultaneously? 相似,但不完全相同时间,即使在两个(不同项目)构建相互踩踏的情况下。这似乎排除了该线程中的所有几个建议。

【问题讨论】:

标签: hudson jenkins


【解决方案1】:

Locks and Latches plugin 应该可以解决您的问题。创建一个锁并让两个作业使用相同的锁。这将阻止作业同时运行。

  1. 在“管理 Jenkins:管理插件”中安装插件。
  2. 在“管理 Jenkins:配置系统”中定义(提供名称)您的锁。
  3. 对于您要参与排除的每个作业,
    1. 在“:配置:构建环境”中,勾选“锁”,
    2. 然后从下拉列表中选择您的锁名称。

【讨论】:

  • 这是完整的解决方案,因为我花了一些时间研究和摸索:
  • 在“管理 Jenkins:管理插件”中安装插件。在“管理 Jenkins:配置系统”中定义(提供名称)您的锁。对于您要参与排除的每个作业,在“:配置:构建环境”中,选中“锁”,然后从下拉列表中选择您的锁名称。
  • @jackr 您应该将您的评论编辑到此答案中以使其完整!
  • 上述插件现已被标记为弃用。一种可能的替代建议是Throttle Concurrent Builds 插件。
【解决方案2】:

Lockable Resources Plugin。 2016 年 5 月,对我来说简单且运行良好。

安装插件。 在管理 Jenkins > 配置系统中,转到可锁定资源管理器。
选择添加可锁定资源。 输入字段值:名称并点击保存。 警告:请勿在名称字段中输入空格。

在 Jenkins > job_name > 配置 > 常规, 选中复选框:此构建需要可锁定的资源。 在字段值中输入一个或多个名称:资源。

开始构建。 在 build #number 下选择 Locked Resources。 您应该会看到类似的内容:此版本已锁定以下资源:resource_name - resource_description

启动使用相同资源的不同构建。 您将在 Jenkins 状态/菜单中看到显示作业名称的构建队列。 悬停文本显示 Startedby、Waiting for resources resources_list、Waiting for time

(也可以使用资源标签/标签)

添加作业配置页面的屏幕截图,因为某些用户似乎存在“此构建需要可锁定资源”不可见的问题:** 当未选中该复选框时,您应该只看到“[_] 此构建需要可锁定资源"

【讨论】:

  • 好插件,但我没有看到在 Jenkins > job_name > 配置 > 常规,选择复选框:此构建需要可锁定的资源。在字段值中输入一个或多个名称:资源。用于管道作业。有什么解决办法吗?
  • 你能更详细地描述你的问题吗?您是否看到“此构建需要可锁定的资源”?你有安装插件吗?
  • @JiteshSojitra 我的情况和你一样。你知道为什么吗?
  • 很抱歉,我们在开始使用云工具后已迁移到 CircleCI :)
  • @JiteshSojitra 谢谢大家。令人讨厌的是,我读到的所有内容都说有这样一个选项,但我就是看不到它。 :)
【解决方案3】:

编辑:以下信息自 2014 年 4 月 10 日起生效

排除插件,https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin 如果少数构建使用相同的资源非常有用 - 例如一个测试数据库。您需要做的就是更新使用此资源的所有作业的配置,因此它们永远不会并行运行,而是等待其他作业完成。

取自:http://www.kaczanowscy.pl/tomek/2012-07/jenkins-plugins-part-iii-towards-continuous-delivery

此插件确实阻止了两个或多个作业并行运行。
要进行测试,请为 job1 执行此操作

  1. 配置
  2. 在构建环境下选中“添加资源以管理排除”。
  3. 然后添加 -> 新资源 -> 名称 -> 锁定
  4. 在构建下 -> 添加构建步骤
  5. 关键方块启动
  6. 添加构建步骤 -> 添加您想要添加的任何内容。(添加 sleep 15 以确保它持续更长时间以检查并发性。)
  7. 添加构建步骤 -> 关键块结束
  8. 对 job2 重复上述步骤,确保使用相同的锁名称“lock”。
  9. 同时手动构建两个作业。
  10. 在 jenkins -> 排除管理下监控运行进度。

【讨论】:

    【解决方案4】:

    2021 年 12 月 1 日
    使用 Build Blocker 插件,从Manage Jenkins > Plugin Manager 安装

    例如,您有两个管道 React-buildReact-tests
    转至React-build -> Configure -> Block build
    如果我不需要React-tests 与当前React-build 作业同时 运行,请将其添加到阻止列表

    也可以使用正则表达式,即为了避免所有以React-开头的项目同时构建,请将React-.*添加到列表中,

    React-tests 替换为您不想并行运行的任何管道名称,使用全局或节点级别选项,

    当尝试与配置的React-build 作业一起运行任何被阻止的作业时,它会进入挂起状态,

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 2019-01-11
    • 2017-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多