-
Bug
-
Resolution: Unresolved
-
Minor
-
None
-
Windows Server 2008 R2
Java 1.8
Jenkins 1.137
Updated all plugins two weeks ago
I define a job somewhat like this:
properties([ [$class: 'ScannerJobProperty', doNotScan: false], buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '120', numToKeepStr: '200')), parameters([ booleanParam(defaultValue: true, description: '', name: 'PARAM1'), [$class: 'ValidatingStringParameterDefinition', defaultValue: '', description: '', failedValidationMessage: '', name: 'PARAM2', regex: ''], [$class: 'ValidatingStringParameterDefinition', defaultValue: '', description: '', failedValidationMessage: '', name: 'PARAM3', regex: ''] [$class: 'ValidatingStringParameterDefinition', defaultValue: '', description: 'trunk', failedValidationMessage: '', name: 'PARAM4', regex: '.*'] ]), [$class: 'ScannerJobProperty', doNotScan: false], pipelineTriggers([pollSCM('H H(0-5) * * *')]) ])
The actual definition is way larger.
If a comma is missing between 'parameters' elements, then some odd Groovy magic happens and this exception is thrown:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during canonicalization: java.lang.UnsupportedOperationExceptionjava.lang.UnsupportedOperationException at com.cloudbees.groovy.cps.CpsTransformer.visitMapEntryExpression(CpsTransformer.java:944) at org.codehaus.groovy.ast.expr.MapEntryExpression.visit(MapEntryExpression.java:39) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:352) at com.cloudbees.groovy.cps.CpsTransformer$29.run(CpsTransformer.java:956) at com.cloudbees.groovy.cps.CpsTransformer.makeChildren(CpsTransformer.java:435) at com.cloudbees.groovy.cps.CpsTransformer.makeNode(CpsTransformer.java:398) at com.cloudbees.groovy.cps.CpsTransformer.visitListExpression(CpsTransformer.java:953) at org.codehaus.groovy.ast.expr.ListExpression.visit(ListExpression.java:64) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer$24.run(CpsTransformer.java:834) at com.cloudbees.groovy.cps.CpsTransformer.makeChildren(CpsTransformer.java:435) at com.cloudbees.groovy.cps.CpsTransformer.makeNode(CpsTransformer.java:398) at com.cloudbees.groovy.cps.CpsTransformer.visitBinaryExpression(CpsTransformer.java:829) at org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:51) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:352) at com.cloudbees.groovy.cps.CpsTransformer$29.run(CpsTransformer.java:956) at com.cloudbees.groovy.cps.CpsTransformer.makeChildren(CpsTransformer.java:435) at com.cloudbees.groovy.cps.CpsTransformer.makeNode(CpsTransformer.java:398) at com.cloudbees.groovy.cps.CpsTransformer.visitListExpression(CpsTransformer.java:953) at org.codehaus.groovy.ast.expr.ListExpression.visit(ListExpression.java:64) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:352) at com.cloudbees.groovy.cps.CpsTransformer$4.run(CpsTransformer.java:493) at com.cloudbees.groovy.cps.CpsTransformer.makeChildren(CpsTransformer.java:435) at com.cloudbees.groovy.cps.CpsTransformer.makeNode(CpsTransformer.java:398) at com.cloudbees.groovy.cps.CpsTransformer.visitMethodCallExpression(CpsTransformer.java:476) at org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:66) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:352) at com.cloudbees.groovy.cps.CpsTransformer$29.run(CpsTransformer.java:956) at com.cloudbees.groovy.cps.CpsTransformer.makeChildren(CpsTransformer.java:435) at com.cloudbees.groovy.cps.CpsTransformer.makeNode(CpsTransformer.java:398) at com.cloudbees.groovy.cps.CpsTransformer.visitListExpression(CpsTransformer.java:953) at org.codehaus.groovy.ast.expr.ListExpression.visit(ListExpression.java:64) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:352) at com.cloudbees.groovy.cps.CpsTransformer$4.run(CpsTransformer.java:493) at com.cloudbees.groovy.cps.CpsTransformer.makeChildren(CpsTransformer.java:435) at com.cloudbees.groovy.cps.CpsTransformer.makeNode(CpsTransformer.java:398) at com.cloudbees.groovy.cps.CpsTransformer.visitMethodCallExpression(CpsTransformer.java:476) at org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:66) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer.visitExpressionStatement(CpsTransformer.java:577) at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:42) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:352) at com.cloudbees.groovy.cps.CpsTransformer$5.run(CpsTransformer.java:503) at com.cloudbees.groovy.cps.CpsTransformer.makeChildren(CpsTransformer.java:435) at com.cloudbees.groovy.cps.CpsTransformer.makeNode(CpsTransformer.java:398) at com.cloudbees.groovy.cps.CpsTransformer.visitBlockStatement(CpsTransformer.java:500) at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:71) at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.java:346) at com.cloudbees.groovy.cps.CpsTransformer$2.run(CpsTransformer.java:377) at com.cloudbees.groovy.cps.CpsTransformer.makeChildren(CpsTransformer.java:435) at com.cloudbees.groovy.cps.CpsTransformer.makeNode(CpsTransformer.java:398) at com.cloudbees.groovy.cps.CpsTransformer.visitWithSafepoint(CpsTransformer.java:363) at com.cloudbees.groovy.cps.CpsTransformer.visitMethod(CpsTransformer.java:222) at com.cloudbees.groovy.cps.CpsTransformer.call(CpsTransformer.java:132) at com.cloudbees.groovy.cps.SandboxCpsTransformer.call(SandboxCpsTransformer.java:34) at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1065) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268) at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688) at groovy.lang.GroovyShell.parse(GroovyShell.java:700) at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:131) at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:125) at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:560) at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:521) at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:330) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429)1 error at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310) at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268) at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688) at groovy.lang.GroovyShell.parse(GroovyShell.java:700) at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:131) at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:125) at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:560) at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:521) at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:330) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:429) Finished: FAILURE
This error is similar to some other reports about tuples not being supported, but I can't really tell as I'm no Java, Groovy nor Pipeline expert. Since I knew that I can't trust the error messages, I started checking the basics, and, sure enough, there was a missing comma between two 'parameters'.
I can imagine newbies getting bitten hard by this, so this should be at least looked at.