共享库
无论是在脚本式(Scripted)还是声明式(Declarative)流水线中,调用共享库(Shared Libraries)的方式基本相同。你可以使用 @Library 注解或 library 步骤来导入共享库,然后按照相同的方式调用库中的函数或类。
在声明式流水线中
|
|
在脚本式流水线中
|
|
或者在 Pipeline 脚本中动态加载:
node {
stage('Example') {
// 动态加载共享库
def myLib = library('my-shared-library').com.example
// 调用共享库中的函数
myLib.mySharedFunction()
}
}
如果共享库中有定义的类或者对象,你也可以按照同样的方式在两种类型的流水线中进行调用。 总的来说,调用方式非常相似,主要的区别在于流水线自身的结构和语法。
post阶段
在脚本式流水线中
在脚本式(Scripted)流水线中,post 阶段不是一个内置的结构,但可以通过 Groovy 的 try、catch 和 finally 语句来模拟 post 阶段的行为。 这里是一个简单的例子:
node {
try {
// 主要的构建步骤
stage('Build') {
echo 'Building...'
}
stage('Test') {
echo 'Testing...'
}
} catch (Exception e) {
// 如果构建失败,会进入这里
currentBuild.result = 'FAILURE'
echo "Caught exception: ${e}"
} finally {
// 这里的代码相当于声明式流水线中的 post { always { ... } }
echo 'This will always run'
// 可以根据 currentBuild.result 来决定执行什么操作
if (currentBuild.result == 'FAILURE') {
echo 'Do something for failure'
} else {
echo 'Do something for success'
}
}
}
在声明式流水线中
在声明式流水线(Declarative Pipeline)中,捕获异常并保存到变量以供后续使用是比较受限的。通常,只能在 post 的 failure 块中处理失败的情况,但不能捕获具体的异常信息。 然而,可以在声明式流水线的 script 块中使用 try/catch 语法来捕获并处理异常。这样,可以获取到错误信息,并通过接口发送。这是一个简单的例子:
pipeline {
agent any
stages {
stage('Example Stage') {
steps {
script {
try {
// 你的代码
} catch (Exception e) {
// 保存错误信息
env.ERROR_MESSAGE = e.toString()
// 可以调用发送接口的步骤
// httpPost(...)
currentBuild.result = 'FAILURE'
error "Stage failed due to: ${env.ERROR_MESSAGE}"
}
}
}
}
}
post {
always {
echo "This will always run."
}
failure {
echo "Build failed. Error message: ${env.ERROR_MESSAGE}"
}
}
}
在上面的例子中,我们在 script 块中使用了 try/catch 来捕获异常,然后将异常信息保存到环境变量 env.ERROR_MESSAGE 中。这样,你就可以在 post 阶段或其它地方使用这个变量,并通过接口发送。 所以,虽然声明式流水线在处理异常方面没有脚本式流水线灵活,但通过使用 script 块,仍然可以达到相似的效果。