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'    }
    }
  1. 据我所知,在第一种方法中,我可以添加 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"
        }
    }
}