【问题标题】:Run Two Jenkins Job in Parallel in a Pipeline with a gap of 2 minutes在管道中并行运行两个 Jenkins 作业,间隔为 2 分钟
【发布时间】:2017-06-06 16:09:59
【问题描述】:

我有两个 Jenkins 作业,我需要并行运行它们,但间隔为 1 或 2 分钟。我的意思是,一旦“Job1”开始,然后在 1 分钟的间隙后,“Job2”应该开始。 “Job1”大约需要 6-7 分钟才能完成。我能够并行运行这些作业,但我无法在它们之间放置一两分钟的间隔。这是我的代码:

node('LINUX_TEST_BOX'){ 
        parallel 'Parallel_1': {
          node('LINUX_TEST_BOX') {
              stage 'P1' 
                  build 'Job1'

          }
        }, 
             'Parallel_2': {
          node('LINUX_TEST_BOX') {
              stage 'P2' 
                  build 'Job2'


          }
  }
}

上面的代码运行良好。一旦 Job1 启动,如何让 Job2 在 2 分钟后运行?我正在寻找两件事。

  1. 如何在这两个并行作业之间留出空隙? (之前我在“睡眠”命令的顺序工作中得到了帮助,但同时不知道该怎么做)
  2. 我希望这两个作业都在同一个节点上运行。现在我在节点中使用一个名为“LINUX_TEST_BOX”的标签。这个标签里面有 4 台机器,可以选择任何机器运行。有什么办法,我可以确保两个作业在同一台机器上运行? (也许一旦 Job1 启动,我是否应该阅读它的 api 并在 Job2 中使用它。所以我需要立即创建 Job2?我不确定这一点。想知道是否有更好的方法。)

谢谢!

【问题讨论】:

  • 我想,我知道了如何弥补差距。很容易。在“P2”阶段之后,只需添加 sleep(60) 即可。但我仍然不确定第 2 点。

标签: jenkins parallel-processing nodes jenkins-pipeline


【解决方案1】:

如果它们需要在同一台机器上运行并且不需要隔离,您可能不需要多个节点调用。 Parallel 没有明确要求,因此您可以将其简化为...

node('LINUX_TEST_BOX'){ 
        parallel 'Parallel_1': {
            stage 'P1' 
            build 'Job1'
        }, 
          'Parallel_2': {
            stage 'P2' 
            build 'Job2'
          }
  }
}

或者,有一个名为 NODE_NAME 的环境变量,您可以将它传递给应该工作的并行部分中的节点函数。

node('LINUX_TEST_BOX'){ 
        parallel 'Parallel_1': {
          node(env.NODE_NAME) {
              stage 'P1' 
                  build 'Job1'

          }
        }, 
             'Parallel_2': {
          node(env.NODE_NAME) {
              stage 'P2' 
                  build 'Job2'


          }
  }
}

要获取其他环境变量的列表,请转到 /pipeline-syntax/globals#env。还有一个可以获取节点的标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2020-07-30
    • 2022-07-27
    • 2016-07-27
    相关资源
    最近更新 更多