如何在Jenkins声明式管道中检测哪个并行阶段失败?

杰伊·斯潘

我的Jenkins管道并行运行多个任务。看来,如果一个阶段失败,则所有后续阶段都将运行它们的failurepost块(无论它们是否实际失败)。我不知道这是设计使然还是做错了什么。

注意:此管道在Windows节点上运行,因此 bat('exit /b 1')

pipeline {
    agent any

    stages {
        stage('Parallel steps') {
            parallel {
                stage('Successful stage') {
                    steps {
                        script { sleep 10 }
                    }
                    post {
                        failure {
                            echo('detected failure: Successful stage')
                        }
                    }
                }
                stage('Failure stage') {
                    steps {
                        script { bat('exit /b 1') }
                    }
                    post {
                        failure { 
                            echo('detected failure: Failure stage')
                        }
                    }
                }
            }
        }
    }
}

在上面的管道中,只有“失败阶段”失败,但是在输出中我看到了这一点,表明这failure两个步骤都执行条件!

Started by user Doe, John
Running on WINDOWS_NODE in D:\workspace
[Successful stage] Sleeping for 10 sec
[Failure stage] [test] Running batch script
[Failure stage] D:\workspace>exit /b 1 
Post stage
[Pipeline] [Failure stage] echo
[Failure stage] detected failure: Failure stage
[Failure stage] Failed in branch Failure stage
Post stage
[Pipeline] [Successful stage] echo
[Successful stage] detected failure: Successful stage
ERROR: script returned exit code 1
Finished: FAILURE

对我来说,检测哪个并行阶段失败并将其报告给整个管道的最佳方法是什么?

杰伊·斯潘

看来这是声明性管道已知 错误我不得不放弃使用内置的post-> failure块,而改用try / catch,它有自己的问题:

  1. 您必须捕获然后重新抛出该错误,以使该阶段适当地失败。
  2. UI可能会有些混乱,因为失败的步骤不再以红色突出显示(但错误消息仍在日志中)。
  3. 该代码的可读性稍差。

此代码正常工作。仅故障阶段回显“检测到的故障”,而不是两者。

pipeline {
    agent any

    stages {
        stage('Parallel steps') {
            parallel {
                stage('Successful stage') {
                    steps {
                        script {
                            try {
                                sleep 10 
                            } catch (e) {
                                echo('detected failure: Successful stage')
                                throw(e)
                            }
                        }
                    }
                }
                stage('Failure stage') {
                    steps {
                        script {
                            try {
                                bat('exit /b 1')
                            } catch (e) {
                                echo('detected failure: Failure stage')
                                throw(e)
                            }
                        }
                    }
                }
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Jenkins声明式管道并行阶段

确定Jenkins声明式管道中的失败阶段

如何在Jenkins声明性管道中阶段性地对同一函数进行并行调用

如何在Jenkins脚本化管道中创建并行阶段?

在并行阶段之前在jenkins声明式管道中创建顺序步骤

Jenkins 声明式管道中的并行项

如何在 Jenkins 声明式管道中循环参数值

并行示例Jenkinsfile声明式管道失败

在阶段结束之后或阶段开始之前触发Jenkins声明式管道中的操作?

如何在声明性Jenkinsfile中定义并行阶段?

在另一个Jenkins声明式管道阶段中,如何使用mvn软件包生成的Jar?

声明式管道中的跳过阶段

Jenkins,如何在 Jenkins 声明式管道中运行 XmlParser/读取 XML

尽管Jenkins管道中的前一阶段失败,如何在连续阶段中执行下一阶段

在Jenkins声明式流水线中与矩阵并行运行非矩阵阶段

在詹金斯管道并行阶段中,如果一个阶段失败,如何迅速杀死其他阶段?

是否可以在Jenkins声明式管道中暂停阶段直到到达某个时间?

仅在Jenkins管道中的阶段A失败时如何触发阶段B

如何在Jenkins管道中使用动态数据构建并行和顺序阶段的组合

如何在Jenkins声明式管道中检查密码参数是否为空?

Jenkins中并行管道中的顺序阶段

如何防止Jenkins并行阶段在管道中创建新的工作区?

Jenkins管道中“脚本”块之外的动态并行阶段

如何在声明性Jenkins管道的各个阶段之间传递变量?

Jenkins声明式管道并行步骤执行程序

Jenkins 管道运行阶段失败

Jenkins:声明性管道中的未知阶段部分“矩阵”

如何在声明式管道中将并行作业限制为特定的从属

如何在声明性Jenkins管道中添加sidecar MySQL?