脚本化的 Jenkins 管道:失败时继续
Scripted Jenkins pipeline: continue on fail
有没有办法在前一阶段失败的情况下继续执行脚本管道?当构建失败时,我需要 运行 在整个作业失败之前执行特定命令(清理)。
通常的方法是将您的步骤包装在一个 try
块中。
try {
sh "..."
} catch (err) {
echo "something failed"
}
// cleanup
sh "rm -rf *"
为了减轻痛苦并使管道代码更具可读性,我将其封装在另一种方法中 here in my global library code。
另一种方法,尤其是。由于这个问题而创建的是 声明性管道 (blog, presentation).
post {
always {
cleanWs()
}
}
}
即使其余部分失败,也会始终清理作业
被接受的答案不会使该阶段失败,甚至不会将其标记为不稳定。现在可以使阶段失败,继续执行管道并选择构建结果:
pipeline {
agent any
stages {
stage('1') {
steps {
sh 'exit 0'
}
}
stage('2') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh "exit 1"
}
}
}
stage('3') {
steps {
sh 'exit 0'
}
}
}
}
在上面的示例中,所有阶段都将执行,管道将成功,但阶段 2 将显示为失败:
正如您可能已经猜到的,您可以自由选择 buildResult
和 stageResult
,以防您希望它不稳定或其他任何情况。您甚至可以使构建失败并继续执行管道。
只需确保您的 Jenkins 是最新的,因为这是一个相当新的功能。
有没有办法在前一阶段失败的情况下继续执行脚本管道?当构建失败时,我需要 运行 在整个作业失败之前执行特定命令(清理)。
通常的方法是将您的步骤包装在一个 try
块中。
try {
sh "..."
} catch (err) {
echo "something failed"
}
// cleanup
sh "rm -rf *"
为了减轻痛苦并使管道代码更具可读性,我将其封装在另一种方法中 here in my global library code。
另一种方法,尤其是。由于这个问题而创建的是 声明性管道 (blog, presentation).
post {
always {
cleanWs()
}
}
}
即使其余部分失败,也会始终清理作业
被接受的答案不会使该阶段失败,甚至不会将其标记为不稳定。现在可以使阶段失败,继续执行管道并选择构建结果:
pipeline {
agent any
stages {
stage('1') {
steps {
sh 'exit 0'
}
}
stage('2') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh "exit 1"
}
}
}
stage('3') {
steps {
sh 'exit 0'
}
}
}
}
在上面的示例中,所有阶段都将执行,管道将成功,但阶段 2 将显示为失败:
正如您可能已经猜到的,您可以自由选择 buildResult
和 stageResult
,以防您希望它不稳定或其他任何情况。您甚至可以使构建失败并继续执行管道。
只需确保您的 Jenkins 是最新的,因为这是一个相当新的功能。