我知道,在脚本化的詹金斯管道中,我可以使用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中的管道时,这些任务看起来像总是执行,这并不理想。
答案 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%完美的,但是可以显示实际发生的情况,到目前为止已经足够好了!