Jenkins管道中的节点、阶段和步骤之间有什么区别?

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') {

我试图理解如何构造Jenkins 2.7管道groovy脚本。我已经通读了这本书,但觉得它可以在这些主题上做更多的扩展

我可以理解,一个管道可以有许多
阶段
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开始,阶段中的步骤必须位于“步骤”块中