脚本化的Jenkins管道,跳过阶段的并行部分

时间:2019-12-04 08:32:16

标签: jenkins jenkins-pipeline jenkins-groovy

我知道,在脚本化的詹金斯管道中,我可以使用Utils.markStageSkippedForConditional将整个阶段标记为已跳过,这将使“执行线”浸入Blue Ocean UI中的阶段。

但是,如果我有一个同时具有并行任务的阶段,则如下所示:

stage('Stage 1') {
  parallel 'Task 1' : {
    node('requirements') {
      doTask1()
    }
  }, 'Task 2' : {
    when (mustDoTask2) { // this 'when' function calls Utils.markStageSkippedForConditional
      node('requirements') {
        doTask2()
      }
    }
  }
}

然后将整个阶段标记为已跳过(毫不奇怪,我想给定Utils函数名称),并且Blue Ocean将管道呈现为从未执行任何并行任务(即使它们确实执行了)。

那么Utils.markStageSkippedForConditional是否有替代方法,我可以用来将单个并行任务标记为已跳过?

我现在可以选择的另一种方法是让并行任务在'node'语句中检查它们是否应该执行任何操作,这是可行的,但是当您查看Blue Ocean中的管道时,这些任务看起来像总是执行,这并不理想。

1 个答案:

答案 0 :(得分:0)

@PatriceM。建议将每个任务放到自己的阶段,这是我目前拥有的最佳解决方案:

stage('Stage 1') {
  parallel 'Task 1' : {
    node('requirements') {
      doTask1()
    }
  }, 'Task 2' : {
    stage('Task 2') { // new nested stage that can be marked as skipped by the 'when'
      when (mustDoTask2) {
        node('requirements') {
          doTask2()
        }
      }
    }
  }
}

请注意,“任务2”并行任务有其自己的阶段。这意味着“何时”可以将该阶段标记为已跳过,而不是将父阶段标记为“阶段1”。不必在“任务1”中添加额外的嵌套阶段,因为它没有“何时”可能会跳过它。

这将导致Blue Ocean以灰色显示已跳过的阶段(而不是周围有直线),并且将日志“排队等待运行开始”,直到整个运行结束为止,然后将其更改为“此阶段已没有步骤”,并显示整个运行的最终日志。它不是100%完美的,但是可以显示实际发生的情况,到目前为止已经足够好了!