我正在开始使用 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/**'
}
我还没有找到关于何时/为何使用这些的可靠文档。有人知道为什么它们不同以及何时适合使用它们吗?
我不确定,但我相信“节点”指令用于脚本化管道,而不是声明性管道。
预先感谢您的任何指导。
最佳答案
是的,顶级节点
意味着脚本化管道,顶级管道
意味着声明式管道。
声明式似乎是一种更面向 future 的选项,也是人们推荐的选项,如 jenkins user list post 所示。核心贡献者说“采用声明式”。这是可视化管道编辑器唯一可以支持的一种。它支持验证。它最终拥有脚本化的大部分功能,因为您可以在大多数情况下回退到脚本化。偶尔有人会提出一个用例,他们无法完全用声明式来做他们想做的事情,但这通常是那些已经使用脚本式一段时间的人,并且这些功能差距可能会及时缩小。最后,如果您确实必须放弃其中一个,那么编写一个从声明式到脚本式的程序化翻译器会比相反的方式更容易(根据定义,因为语法受到更严格的限制)。
来自通用可用性博客文章的有关声明式优点的更多背景信息:https://jenkins.io/blog/2017/02/03/declarative-pipeline-ga/
我能找到的最官方的文档提到了两者(截至 2017 年 6 月 21 日):https://jenkins.io/doc/book/pipeline/syntax/
关于Jenkins 管道 Jenkinsfile : 'node' and 'pipeline' directives,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44657896/