首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jenkinsfile : java.lang.RuntimeException:方法代码太大

Jenkinsfile : java.lang.RuntimeException:方法代码太大
EN

Stack Overflow用户
提问于 2021-04-28 15:27:32
回答 2查看 8.2K关注 0票数 2

我有jenkisnfile中的Jenkins管道代码,它是790行。我收到以下错误消息Method code too large

代码语言:javascript
运行
复制
11:05:24  org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
11:05:24  General error during class generation: Method code too large!
11:05:24  
11:05:24  java.lang.RuntimeException: Method code too large!
11:05:24    at groovyjarjarasm.asm.MethodWriter.a(Unknown Source)
11:05:24    at groovyjarjarasm.asm.ClassWriter.toByteArray(Unknown Source)
11:05:24    at org.codehaus.groovy.control.CompilationUnit$17.call(CompilationUnit.java:827)
11:05:24    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1065)
11:05:24    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
11:05:24    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
11:05:24    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
11:05:24    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
11:05:24    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
11:05:24    at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
11:05:24    at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
11:05:24    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:142)
11:05:24    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
11:05:24    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:571)
11:05:24    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:523)
11:05:24    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:337)
11:05:24    at hudson.model.ResourceController.execute(ResourceController.java:97)
11:05:24    at hudson.model.Executor.run(Executor.java:429)
11:05:24  
11:05:24  1 error
11:05:24  
11:05:24    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
11:05:24    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
11:05:24    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
11:05:24    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
11:05:24    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
11:05:24    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
11:05:24    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
11:05:24    at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
11:05:24    at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
11:05:24    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:142)
11:05:24    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
11:05:24    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:571)
11:05:24    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:523)
11:05:24    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:337)
11:05:24    at hudson.model.ResourceController.execute(ResourceController.java:97)
11:05:24    at hudson.model.Executor.run(Executor.java:429)
11:05:24  Finished: FAILURE

使用下列版本

OS:Ubuntu 18.04.1

詹金斯:2.263.4

Java:1.8.0_181 (主从)

JAVA_ARGS="-Xmx2048m"中设置/etc/default/jenkins(母版)

我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-28 15:36:51

Java对字节码的大小限制为64K。这不是詹金斯的问题。要解决这个问题,您应该将管道分解为方法。有一个很好的例子,here

票数 7
EN

Stack Overflow用户

发布于 2021-05-16 17:49:01

是的,这是一个限制,您必须使用共享库/将它们划分为方法来解决这个问题。共享库的参考:https://www.jenkins.io/doc/book/pipeline/shared-libraries/

解决方案:使用jenkinsfile来定义阶段,所有方法/功能都在共享库中实现,而共享库将从jenkinsfile中调用。

示例实现如下所示。创建一个名为: sharedlibraries (groovy文件)的文件

代码语言:javascript
运行
复制
#!groovy
// Write or add Functions(definitions of stages) which will be called from your jenkins file
def Create_AMI(PROJECT_NAME, ENV_NAME)
 {
     echo ENV_NAME
     sh "packer build jenkins/${PROJECT_NAME}/${PROJECT_NAME}-ami.json"
     // You can also set the environment below example:
     env.ENV_NAME ="dev"
 }

return this

在Jenkinsfile中,编写以下代码:

代码语言:javascript
运行
复制
// Global variable is used to get data from groovy file(shared library)
def stagelibrary
stage('Create New AMI') {   
            steps {
              script {
                        // Load Shared library Groovy file stagelibraries.Give your path of stagelibraries file whic is created
                        stagelibrary = load 'C:\\Jenkins\\stagelibraries'
                        // Execute Create_AMI function. You can add if else conditions over here, based on your branches. But am not sure of your conditions.
                        // You can also pass your environment variable 
                        // in the Crete_AMI function using env.<YOURENVVARIABLE>
                        stagelibrary.Create_AMI(PROJECT_NAME,env.ENV_NAME)       
                      }               
                  }
        }

这只是向您展示如何将您的功能划分为sharedlibraries的一个示例,它不会给您带来与代码限制相关的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67303181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档