Jenkins管道中的节点、阶段和步骤之间有什么区别?
我试图理解如何构造Jenkins 2.7管道groovy脚本。我已经通读了这本书,但觉得它可以在这些主题上做更多的扩展 我可以理解,一个管道可以有许多Jenkins管道中的节点、阶段和步骤之间有什么区别?,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我试图理解如何构造Jenkins 2.7管道groovy脚本。我已经通读了这本书,但觉得它可以在这些主题上做更多的扩展 我可以理解,一个管道可以有许多阶段s,每个阶段可以有许多步骤s。但是step()之间的区别是什么和阶段中的方法调用,比如sh([script:“echo hello”])。nodes应该在stages的内部还是外部?作业的总体属性应该在节点内部还是外部 以下是我在ubuntu主节点上的当前结构: #!/usr/bin/env groovy node('master') {
阶段
s,每个阶段
可以有许多步骤
s。但是step()之间的区别是什么代码>和阶段中的方法调用,比如sh([script:“echo hello”])代码>。node
s应该在stage
s的内部还是外部?作业的总体属性应该在节点内部还是外部
以下是我在ubuntu主节点上的当前结构:
#!/usr/bin/env groovy
node('master') {
properties([
[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']]
]);
stage 'Checkout'
checkout scm
stage 'Build'
sh([script: "make build"]);
archive("bin/*");
}
视情况而定。任何节点
声明都会分配一个执行器(在Jenkins master或slave上)。这需要您和unstash
工作区,因为另一个执行者没有可用的签出源
管道DSL的几个步骤在flyweight执行器中运行,因此不需要位于节点
块中。
这可能有助于以下示例,其中您仍然需要分配多个节点:
阶段(“签出”){
校验scm
}
舞台(“建造”){
节点('linux'){
sh“制造”
}
节点('窗口'){
蝙蝠“随便”
}
}
舞台(“上传”){
...
另一个(可能更现实的例子)是以并行方式分配多个节点
。这样就不需要让阶段
调用在另一个分配的执行器中执行(aka in节点
)
我觉得你的例子很好。没有必要在单个阶段内分配多个节点,因为这只会增加额外的开销。节点、阶段和步骤的概念不同:
节点
指定事件发生的位置。您给出一个名称或标签,Jenkins在那里运行块
stage
将脚本组织成一个高级序列。stage在Pipeline stage视图中显示为列,其中包含平均stage时间和stage结果的颜色
step
是一种指定将发生什么的方法。sh
具有类似的质量,它是一种不同的操作。(您也可以对已指定为项目的内容使用build
。)
因此,步骤
s可以驻留在节点
s中(如果没有,则在主节点上执行),节点
s和步骤
s可以与阶段
s构成一个整体序列。是阶段
s的最后一个字。不幸的是,步骤不能再驻留在节点中。WorkflowScript:13:未知阶段节“节点”。从版本0.5开始,阶段中的步骤必须位于“步骤”块中