Jenkins流水线(Jenkins Pipeline) Jenkinsfile: 'node'和'pipeline'指令

58

我正在开始学习Jenkins声明式流水线。从我看到的一些示例中,我注意到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指令来设置的:
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/**'

}

我无法找到关于何时/为什么使用它们的可靠文档。是否有人知道它们的区别以及何时适用于它们之一?

我不确定,但我认为“node”指令用于脚本管道,而不是声明性管道。

提前感谢任何指导。

1个回答

66

是的,顶级node表示脚本化流水线,而顶级pipeline则表示声明式流水线。

声明式似乎是更具未来性的选择,并且是人们推荐的选择,就像在这篇jenkins用户列表帖子中一位核心贡献者所说的"使用声明式"。它是唯一支持Visual Pipeline Editor的选项。它支持验证。并且最终具有大多数脚本式的功能,因为你可以在大多数情况下回退到脚本式。偶尔会有人提出使用声明式无法完全满足他们想要做的事情的用例,但这通常是已经使用脚本式一段时间的人,这些功能差距可能在未来会缩小。最后,如果您真的必须放弃其中一个,编写从声明式到脚本式的程序翻译器比另一种方式容易(这基本上是定义,因为语法更加紧密限制)。

有关声明式优点的更多上下文信息请参考此发布页面

截至2017年6月21日,我能找到同时提到两者的最官方文档:https://jenkins.io/doc/book/pipeline/syntax/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接