Jenkins Pipeline Jenkinsfile:'节点'和'管道'指令

时间:2017-06-20 16:01:21

标签: jenkins jenkins-pipeline

我开始使用Jenkins declarative Pipeline。从我看到的一些例子中,我注意到Jenkinsfile是使用Pipeline指令设置的:

pipeline {
    agent any 

    stages {
        stage('Build') { 
            steps { 
                sh 'make' 
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml' 
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}

在其他示例中,我注意到Jenkinsfile是使用节点指令设置的:

node {
    stage 'Checkout'
        checkout scm

    stage 'Build'
        bat 'nuget restore SolutionName.sln'
        bat "\"${tool 'MSBuild'}\" SolutionName.sln /p:Configuration=Release /p:Platform=\"Any CPU\" /p:ProductVersion=1.0.0.${env.BUILD_NUMBER}"

    stage 'Archive'
        archive 'ProjectName/bin/Release/**'

}

我还没有找到关于何时/为何使用这些内容的确切文档。有没有人知道为什么这些不同以及什么时候适合使用它们?

我不确定,但我相信节点'指令用于脚本管道而不是声明性管道。

提前感谢任何指导。

1 个答案:

答案 0 :(得分:43)

是的,顶级node表示脚本化管道,顶级pipeline表示声明性管道。

声明似乎是更具前瞻性的选项,也是人们推荐的选项,就像在jenkins user list post中,核心贡献者说“去声明”。它是Visual Pipeline Editor唯一可以支持的。它支持验证。它最终拥有脚本的大部分功能,因为你可以在大多数情况下回归脚本。偶尔会有人提出一个用例,他们不能完全按照声明的方式做他们想做的事情,但这通常是那些已经使用脚本一段时间的人,这些功能差距很可能会及时关闭。最后,如果你真的不得不保留其中一个,那么编写一个程序化的翻译器从声明到脚本将比另一种方式更容易(根据定义,因为语法受到更严格的限制)。

来自普通可用性博客文章的更多关于声明性优点的背景:https://jenkins.io/blog/2017/02/03/declarative-pipeline-ga/

我能找到的最正式的文档(截至2017年6月21日):https://jenkins.io/doc/book/pipeline/syntax/