【问题标题】:Managing builds of two different but related jenkins jobs管理两个不同但相关的詹金斯作业的构建
【发布时间】:2020-09-16 17:41:33
【问题描述】:

我有两个 jenkins 声明性管道作业 A 和 B。作业 A 需要具有并发构建,但是当作业 A 正在运行并且作业 B 不能同时运行时,作业 B 不能运行。我不想通过使用可锁定资源插件锁定资源来阻止作业 A 的并发构建。我怎样才能使这种情况起作用。有什么想法或建议吗?

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-plugins


    【解决方案1】:

    对此没有很好的解决方案。 “正确”的解决方案 IMO 是一个读/写互斥体,其中B 可以锁定 R/W(因此 A 和 B 都不能使用该资源),但 A 只能锁定 W(所以 A 可以继续获取读锁,但B无法获取其写锁)。

    到目前为止,我见过的最好的解决方法是手动创建一个具有相同标签的大型可锁定资源池。让A 一次请求锁定该标签的一个资源,而B 锁定整个池(注意lock 步骤有一个参数quantity)。这允许相同的功能,但更加神秘且无法扩展(如果您突然需要同时运行 100 次 A 但只创建了 50 个资源,则您不再具有完全并行性)

    【讨论】:

      【解决方案2】:

      能否让 Job B 监控 Job A 的执行,让 Job B 仅在 Job A 完成后触发?

      更新。

      我理解那部分,但是通过让一个工作触发另一个工作,他将确保它们不会同时运行。 其他解决方案是向 Job B 添加一个小管道,用于检查 Job A 是否仍在运行:

      def jenkins = Jenkins.getInstance()
      def jobName = "Job A"
      def job = jenkins.getItem(jobName)
      if(job.isBuilding()) {
          <insert your logic>
      }
      

      【讨论】:

      • OP 并不暗示两者之间有任何因果关系,只是他们有一个共享资源,A 可以同时使用,而 B 不能。
      猜你喜欢
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 2023-01-07
      • 2020-07-04
      • 1970-01-01
      相关资源
      最近更新 更多