Jenkins.io:在管道编码上下文中,“节点”是一个执行两件事的步骤,通常是通过从代理上的可用执行者那里获得帮助:
通过将其中包含的步骤添加到 Jenkins 构建队列来安排其中包含的步骤运行(以便一旦节点上的执行器插槽空闲,相应的步骤就会运行)
最佳实践是在节点内完成所有实质性工作,例如构建或运行 shell 脚本,因为阶段中的节点块会告诉 Jenkins,它们中的步骤是资源密集型的,可以安排,请从代理池请求帮助,并仅在需要时锁定工作区。
阶段内的 Vanilla Jenkins 节点块如下所示:
stage 'build' {
node('java7-build'){ ... }
node('java8-build'){ ... }
}
进一步扩展这个概念 Cloudbees 写了关于并行性和分布式构建与 Jenkins的文章。您的 Cloudbees 工作流程可能如下所示:
stage 'build' {
parallel 'java7-build':{
node('mvn-java7'){ ... }
}, 'java8-build':{
node('mvn-java8'){ ... }
}
}
您对管道中不同构建的可视化要求可以满足任一工作流程,但我相信 Jenkins 文档的最佳实践。
编辑
为了解决@Stephen想看到的可视化问题,他是对的——它不起作用!该问题已向 Jenkins 提出并在此处记录,涉及使用“标记块”的解决方案仍在进行中:-(
问:是否有文档允许管道用户不要将阶段放在并行步骤中?
A:不,如果这样做了,这被认为是错误的使用;阶段仅作为流水线中的顶级结构有效,这就是为什么将标记块作为单独结构的概念出现的原因......我的意思是从我的流水线中的并行步骤中删除阶段。
如果您尝试在并行作业中使用阶段,您将度过一段糟糕的时光。
ERROR: The ‘stage’ step must not be used inside a ‘parallel’ block.