在管道中并行运行两个Jenkins Job,间隔为2分钟

时间:2017-04-28 11:38:03

标签: jenkins parallel-processing nodes jenkins-pipeline

我有两个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. 如何在这两个平行工作之间留出差距? (之前我在'sleep'命令的顺序作业中得到了帮助,但并不确定该怎么做)
  2. 我希望这两个作业在同一节点上运行。现在我在名为'LINUX_TEST_BOX'的节点中使用了一个标签。该标签中包含4台机器,可以选择任何机器运行。有什么办法,我可以确保两个作业都在同一台机器上运行吗? (也许一旦Job1启动,我应该阅读它的api并在Job2中使用它。所以我需要立即创建Job2吗?我不确定这个。想知道是否有更好的方法。)
  3. 谢谢!

1 个答案:

答案 0 :(得分: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'


          }
  }
}

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