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

tar*_*yte 42 jenkins jenkins-pipeline

我试图了解如何构建我的Jenkins 2.7管道groovy脚本.我已经阅读了管道教程,但觉得它可以扩展这些主题.

我可以理解一个管道可以有很多stages,每个管道stage可以有很多steps.但是,a step();和a 之间的方法调用有什么区别stagesh([script: "echo hello"]);.应该在nodes的内部还是外部stage?工作的整体属性应该在内部还是外部node

这是我在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/*");
}
Run Code Online (Sandbox Code Playgroud)

chr*_*s_f 36

的概念node,stage并且step是不同的:

  • node指定在那里的东西应该发生.你给出一个名字或标签,詹金斯在那里运行.

  • stage将您的脚本构建为高级序列.阶段在"管道舞台"视图中显示为列,具有舞台结果的平均舞台时间和颜色.

  • step是指明将要发生什么的一种方式.sh具有相似的品质,它是一种不同的行为.(您也可以使用build已指定为项目的内容.)

因此steps可以驻留在nodes中(如果它们不存在,则它们在主服务器上执行),并且nodes和steps可以构造成具有stages 的整体序列.

  • 不幸的是,步骤不能再驻留在节点中。“WorkflowScript:13:未知的阶段部分“节点”。从版本 0.5 开始,阶段中的步骤必须位于“步骤”块中” (2认同)

Ste*_*ing 9

这取决于.任何node声明都会分配执行程序(在Jenkins主服务器或从服务器上).这要求您stashunstash工作区作为另一个执行程序没有可用的签出源.

Pipeline DSL的几个步骤在flyweight执行器中运行,因此不需要在node块内.这可能对以下示例有帮助,您需要分配多个节点:

stage("Checkout") {
  checkout scm
}

stage("Build") {
  node('linux') {
    sh "make"
  }
  node('windows') {
    bat "whatever"
  }
}

stage("Upload") {
  ...
Run Code Online (Sandbox Code Playgroud)

另一个(可能更现实的例子)是分配多个节点parallel.然后就没有必要让stage调用在另一个分配的执行程序(也就是内部node)中执行.

你的例子对我很好.没有必要node在单个stages中分配多个s ,因为这只是额外的开销.