jenkins 问题 - 添加 post 部分到基于脚本和方法之间的区别
jenkins question - Adding post section to script based & difference between methods
我有 2 个关于詹金斯的问题
1.这两种方法有什么区别?
方法一
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
方法二
node ("jenkins-nodes") {
stage("git clone"){
echo 'Hello World' }
}
- 据我所知,在第一种方法中,我可以添加 Post 部分,无论作业结果如何,该部分都将是 运行。我想为第二种方法添加相同的 post 部分,但它不起作用。有什么想法吗?
What is the difference between the 2 methods?
作为 Noam Helmer wrote, pipeline{}
is declarative syntax and and node{}
is scripted 语法。
一般来说,我建议始终使用 pipeline{}
,因为它使常见任务更容易编写,并且使用 Blue Ocean 插件的可视化最适合声明式管道。
当声明式管道变得过于不灵活时,您可以使用声明式管道中的 script{}
步骤插入脚本块:
pipeline {
agent any
stages {
stage('Example') {
steps {
script {
echo 'Hello World'
}
}
}
}
}
更简洁的方法是定义一个函数,该函数按定义编写脚本并将其用作声明性管道中的自定义步骤。请注意,即使没有 script{}
!
这也有效
pipeline {
agent any
stages {
stage('Example') {
steps {
myStep 42
}
}
}
}
void myStep( def x ) {
echo "Hello World $x" // prints "Hello World 42"
}
在使用大量自定义代码的复杂管道中,我通常每个阶段都有一个函数。这使 pipeline{}
保持干净,并且可以很容易地看到管道的整体结构,而不会 script{}
到处乱七八糟。
As I understand in the first method I can add Post section that will
be running regardless of the result of the job. I wish to add the same
post section for the second method, but it is not working. Any ideas?
post{}
仅在声明性管道中可用,但在脚本化管道或声明性管道的脚本部分中不可用。您可以改用 try{} catch{} finally{}
。 catch{}
仅在发生错误时运行,finally{}
始终运行。您可以同时使用 catch{}
和 finally{}
.
中的一个或其中之一
node ("jenkins-nodes") {
stage("git clone"){
echo 'Hello World'
try {
// some steps that may fail
}
catch( Exception e ) {
echo "An error happened: $e"
// Rethrow exception, to let the build fail.
// If you remove "throw", the error would be ignored by Jenkins.
throw
}
finally {
echo "Cleaning up some stuff"
}
}
}
我有 2 个关于詹金斯的问题
1.这两种方法有什么区别?
方法一
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
方法二
node ("jenkins-nodes") {
stage("git clone"){
echo 'Hello World' }
}
- 据我所知,在第一种方法中,我可以添加 Post 部分,无论作业结果如何,该部分都将是 运行。我想为第二种方法添加相同的 post 部分,但它不起作用。有什么想法吗?
What is the difference between the 2 methods?
作为 Noam Helmer wrote, pipeline{}
is declarative syntax and and node{}
is scripted 语法。
一般来说,我建议始终使用 pipeline{}
,因为它使常见任务更容易编写,并且使用 Blue Ocean 插件的可视化最适合声明式管道。
当声明式管道变得过于不灵活时,您可以使用声明式管道中的 script{}
步骤插入脚本块:
pipeline {
agent any
stages {
stage('Example') {
steps {
script {
echo 'Hello World'
}
}
}
}
}
更简洁的方法是定义一个函数,该函数按定义编写脚本并将其用作声明性管道中的自定义步骤。请注意,即使没有 script{}
!
pipeline {
agent any
stages {
stage('Example') {
steps {
myStep 42
}
}
}
}
void myStep( def x ) {
echo "Hello World $x" // prints "Hello World 42"
}
在使用大量自定义代码的复杂管道中,我通常每个阶段都有一个函数。这使 pipeline{}
保持干净,并且可以很容易地看到管道的整体结构,而不会 script{}
到处乱七八糟。
As I understand in the first method I can add Post section that will be running regardless of the result of the job. I wish to add the same post section for the second method, but it is not working. Any ideas?
post{}
仅在声明性管道中可用,但在脚本化管道或声明性管道的脚本部分中不可用。您可以改用 try{} catch{} finally{}
。 catch{}
仅在发生错误时运行,finally{}
始终运行。您可以同时使用 catch{}
和 finally{}
.
node ("jenkins-nodes") {
stage("git clone"){
echo 'Hello World'
try {
// some steps that may fail
}
catch( Exception e ) {
echo "An error happened: $e"
// Rethrow exception, to let the build fail.
// If you remove "throw", the error would be ignored by Jenkins.
throw
}
finally {
echo "Cleaning up some stuff"
}
}
}