【问题标题】:jenkins plugin to fail build based on console output詹金斯插件基于控制台输出失败构建
【发布时间】:2012-11-27 22:38:33
【问题描述】:

如果控制台输出出现模式,是否有插件导致构建失败?

例如:

Build Action - success
Build Action - success
Build Action - error_pattern
Build Action - success

假设 Jenkins 构建过程不会在 error_pattern 上构建失败,我需要有某种外部失败触发器。

编辑

寻找在构建过程中失败的解决方案,而不是构建后任务。

【问题讨论】:

    标签: plugins build jenkins


    【解决方案1】:

    你应该试试Post Build Task 插件。 您可以搜索模式,然后启动脚本。

    编辑: 还有Text finder plugin,看起来更适合你的问题

    【讨论】:

    • 不幸的是,两个插件都在构建完成后运行,而我正在寻找的是在构建过程中构建失败的东西(构建应该在 20 分钟而不是 6 小时后运行并失败)
    • 哦,好吧......(也许你应该在你的问题中准确地说:))
    • 后来发现了什么?我有类似的情况,一些构建步骤失败并打印出某些字符串意味着它失败了,但是在预定义的超时时间过去之前我们无法重新启动构建
    【解决方案2】:

    作为一个丑陋的解决方法,我执行以下操作:在构建脚本中将所有输出重定向到某个生成的 .log 文件,然后您可以在后台以您喜欢的方式 grep 通过此文件(我个人另外进行了冻结检查 -计算校验和并与以前的比较,如果相同 - 开始计数超时直到阈值)等...

    缺点是输出到某个文件而不是 Jenkins 控制台,但我想你可以同时使用 tee (我不在乎,因为我的目标是无论如何都要存档日志并通过电子邮件发送,-所以我只是 gzip 我生成的 .log 文件并将其作为工件附加到构建记录 + 到电子邮件中)。

    优势是您可以完全控制构建输出中发生的事情,并且可以使用您自己的返回码/消息中断构建。

    【讨论】:

    • 我有兴趣查看您可以提供的任何代码示例
    【解决方案3】:

    我使用this answer 作为管道脚本的基础。在“构建”阶段,我有两个并行的子阶段 - 其中一个正在执行实际构建并输出到日志,而另一个子阶段正在获取相同的日志。我已经否定了退出代码(! grep),以便在找到“错误:”字符串时会出错。感谢failFast 设置,一旦找到字符串,这将导致整个“构建”阶段失败。在第一个子阶段的末尾有一个额外的grep,以防最后产生错误。

    我正在使用变量 (BUILD_COMPLETE) 跟踪构建状态。

    pipeline {
        agent {
            label 'master'
        }
        environment {
            BUILD_COMPLETE = false
        }
        stages {
            stage('Build') {
                failFast true
                parallel {
                    stage('Building') {
                        steps {
                            sh 'echo foo | tee output.log'
                            sleep 5
                            sh 'echo bar | tee -a output.log'
                            sleep 5
                            sh 'echo ERROR: baz | tee -a output.log'
                            sleep 5
                            sh 'echo qux | tee -a output.log'
                            sleep 5
    
                            sh '! grep "^ERROR:" output.log'
    
                            script {
                                BUILD_COMPLETE = true
                            }
                        }
                    }
                    stage('Monitoring the logs') {
                        steps {
                            script {
                                while (BUILD_COMPLETE != true) {
                                    sh '! grep "^ERROR:" output.log'
                                    sleep 1
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      相关资源
      最近更新 更多