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

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during class generation: Method code too large! error in pipeline Script

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Blocker Blocker
    • workflow-cps-plugin
    • None

      Note from the Maintainers

      There is partial fix for this for Declarative pipelines in pipeline-model-definition-plugin v1.4.0 and later, significantly improved in v1.8.4.  Due to the extent to which it change how pipelines are executed it is turned off by default.  It can be turned on by setting a JVM property (either on the command-line or in Jenkins script console):

      org.jenkinsci.plugins.pipeline.modeldefinition.parser.RuntimeASTTransformer.SCRIPT_SPLITTING_TRANSFORMATION=true 

      As noted, this still works best with a Jenkinsfile with pipeline directive as the only root item in the file.
      Since v1.8.2 this workaround reports an informative error for pipelines using `def` variables before the pipeline directive. Add a @Field annotation to those declaration.
      This workaround generally does NOT work if the pipeline directive inside a shared library method. If this is a scenario you want, please come join the pipeline authoring SIG and we can discuss.

      Please give it a try and provide feedback. 

      Hi,

      We are getting below error in Pipeline which has some 495 lines of groovy code. Initially we assumed that one of our methods has an issue but once we remove any 30-40 lines of Pipeline groovy, this issue is not coming.

      Can you please suggest a quick workaround. It's a blocker for us.

      org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
      General error during class generation: Method code too large!
      
      java.lang.RuntimeException: Method code too large!
      	at groovyjarjarasm.asm.MethodWriter.a(Unknown Source)
      	at groovyjarjarasm.asm.ClassWriter.toByteArray(Unknown Source)
      	at org.codehaus.groovy.control.CompilationUnit$16.call(CompilationUnit.java:815)
      	at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1053)
      	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
      	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
      	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
      	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.reparse(CpsGroovyShell.java:67)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:410)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:373)
      	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:213)
      	at hudson.model.ResourceController.execute(ResourceController.java:98)
      	at hudson.model.Executor.run(Executor.java:410)
      
      1 error
      
      	at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
      	at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1073)
      	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
      	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
      	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
      	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.reparse(CpsGroovyShell.java:67)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:410)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:373)
      	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:213)
      	at hudson.model.ResourceController.execute(ResourceController.java:98)
      	at hudson.model.Executor.run(Executor.java:410)
      Finished: FAILURE
      

        1. errorIncomaptiblewithlocalvar.txt
          8 kB
        2. java.png
          java.png
          294 kB
        3. JenkinsCodeTooLarge.groovy
          45 kB
        4. Script_Splitting.groovy
          44 kB
        5. Script_Splittingx10.groovy
          519 kB

          [JENKINS-37984] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during class generation: Method code too large! error in pipeline Script

          Anudeep Lalam created issue -
          Jesse Glick made changes -
          Epic Link New: JENKINS-35390 [ 171183 ]
          Jesse Glick made changes -
          Component/s New: workflow-cps-plugin [ 21713 ]
          Component/s Original: pipeline [ 21692 ]
          Assignee Original: Jesse Glick [ jglick ]
          Jesse Glick made changes -
          Priority Original: Blocker [ 1 ] New: Major [ 3 ]
          Andrew Bayer made changes -
          Link New: This issue is duplicated by JENKINS-50033 [ JENKINS-50033 ]
          Ruud P made changes -
          Comment [ I brake up the code but it did not help, so what i am doing wrong here? Anny solution available?

           

          oringinal:

          stages \{
           stage('Test') \{
           parallel \{
              stage(bla1t') \{
                when \{expression bla}}
                  steps \{node(label: 'bla') \{test('bla', '')}}}

              stage(bla1t') \{
                when \{expression bla}}
                  steps \{node(label: 'bla') \{test('bla', '')}}}

              stage(bla1t') \{
                when \{expression bla}}
                  steps \{node(label: 'bla') \{test('bla', '')}}}

              stage(bla1t') \{
                when \{expression bla}}
                  steps \{node(label: 'bla') \{test('bla', '')}}}

               ..... more as 200

           

          change it into:

          stages \{
             stage('Test') \{ maintest()}

          (in the same file i defined a function maintest with all the parallel stages)

          def maintest()

          parallel \{

             stage(bla1t') \{
                when \{expression bla}}
                  steps \{node(label: 'bla') \{test('bla', '')}}}

              stage(bla1t') \{
                when \{expression bla}}
                  steps \{node(label: 'bla') \{test('bla', '')}}}

              stage(bla1t') \{
                when \{expression bla}}
                  steps \{node(label: 'bla') \{test('bla', '')}}}

              stage(bla1t') \{
                when \{expression bla}}
                  steps \{node(label: 'bla') \{test('bla', '')}}}

               ..... more as 200

           

            ]
          efo plo made changes -
          Attachment New: JenkinsCodeTooLarge.groovy [ 46318 ]
          Wim Gaethofs made changes -
          Link New: This issue is related to JENKINS-56500 [ JENKINS-56500 ]
          sivanarayana baisani made changes -
          Priority Original: Major [ 3 ] New: Blocker [ 1 ]
          Liam Newman made changes -
          Remote Link New: This issue links to "PR-355 (Web Link)" [ 23835 ]
          Liam Newman made changes -
          Comment [ This PR should mitigate this issue for most scenarios.  Splits the declarative code into classes and methods. ]

            Unassigned Unassigned
            anudeeplalam Anudeep Lalam
            Votes:
            87 Vote for this issue
            Watchers:
            103 Start watching this issue

              Created:
              Updated: