Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-53135

Multibranch Pipeline job nondescript error due to missing comma in properties([parameters([...

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • workflow-cps-plugin
    • 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.

       

            Unassigned Unassigned
            gl1koz3 Edgars Batna
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: