【发布时间】:2015-06-21 05:55:22
【问题描述】:
我们的 Jenkins CI 服务器出现问题。
我们的 CI 实现依赖于几个 Groovy 脚本,我们在 Jenkins 中将它们作为“系统 Groovy 脚本”执行。多年来一直如此,并且脚本最近没有进行任何修改,并实现了构建流程、版本检查等业务逻辑步骤。
昨天,我们开始在每个尝试启动的 Jenkins 作业中遇到异常,以某种方式尝试执行 Groovy 脚本。例外是:
java.lang.StackOverflowError
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.additiveExpression(GroovyRecognizer.java:12478)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.shiftExpression(GroovyRecognizer.java:9695)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.relationalExpression(GroovyRecognizer.java:12383)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.equalityExpression(GroovyRecognizer.java:12307)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.regexExpression(GroovyRecognizer.java:12255)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.andExpression(GroovyRecognizer.java:12223)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.exclusiveOrExpression(GroovyRecognizer.java:12191)
hundreds of similar lines
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.compoundStatement(GroovyRecognizer.java:7510)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.compatibleBodyStatement(GroovyRecognizer.java:8834)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.statement(GroovyRecognizer.java:899)
at org.codehaus.groovy.antlr.parser.GroovyRecognizer.compilationUnit(GroovyRecognizer.java:757)
at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:131)
at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:108)
at org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:236)
at org.codehaus.groovy.control.CompilationUnit$1.call(CompilationUnit.java:161)
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:846)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:550)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:526)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:503)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:302)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:281)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:731)
at groovy.lang.GroovyShell.parse(GroovyShell.java:743)
at groovy.lang.GroovyShell.parse(GroovyShell.java:770)
at groovy.lang.GroovyShell.parse(GroovyShell.java:761)
at groovy.lang.GroovyShell$parse.call(Unknown Source)
at com.cloudbees.plugins.flow.FlowDSL.executeFlowScript(FlowDSL.groovy:80)
at com.cloudbees.plugins.flow.FlowRun$FlyweightTaskRunnerImpl.run(FlowRun.java:219)
at hudson.model.Run.execute(Run.java:1759)
at com.cloudbees.plugins.flow.FlowRun.run(FlowRun.java:155)
at hudson.model.ResourceController.execute(ResourceController.java:89)
at hudson.model.Executor.run(Executor.java:240)
at hudson.model.OneOffExecutor.run(OneOffExecutor.java:43)
这看起来像是 Jenkins 中的 Groovy 解析器在尝试解析 groovy 脚本时到达堆栈顶部(正如我所说,这突然开始发生在许多之前运行良好且最近没有进行修改的脚本中)。
目前我们的 Jenkins 安装 (v1.594) 在 AIX v7.1 上的 Websphere 8.5.5.2 应用程序服务器上运行(不确切知道修复包级别和/或它最近是否经历过任何类型的更新,仍然试图收集信息)。
重新启动后,我们恢复了正常行为(所有脚本都再次照常工作,无需对其进行任何修改)。
有人知道任何底层库与 Jenkins Groovy 解析存在一些不兼容吗?
【问题讨论】:
-
听起来像是更新。对 Groovy 版本的更改或任何底层依赖都可能导致此类问题。
-
AIX 上的操作系统更新是否如此糟糕以至于被视为“痛苦”?
-
我在考虑一个 WAS 修复包,但不知道是否正确的术语是受苦(英语不是我的母语)。最好是:如果它最近经历过任何形式的更新?
-
运营团队告诉我操作系统没有更新,应用服务器也没有更新。我们昨天又看到了这个问题,不得不再次重启 Jenkins
-
我现在才发现这个问题...从我假设您在这里至少使用 Groovy 2.3 的版本中。我假设所有那些重复的堆栈跟踪元素都来自 org.codehaus.groovy.antlr.parser.GroovyRecognizer 是否正确?我不相信循环类引用。但如果这部分有溢出,则说明 AST 是以一种意想不到的方式形成的。我需要重复的确切部分来了解是什么构造导致了这种情况
标签: java groovy jenkins websphere