Сценарий конвейера Jenkins завершается с ошибкой "Общая ошибка при генерации класса: код метода слишком велик!"

При запуске большого конвейерного скрипта Jenkins может выдать ошибку:

org.codehaus.groovy.control.MultipleCompilationErrorsException: сбой запуска: общая ошибка при генерации класса: слишком большой код метода!

java.lang.RuntimeException: код метода слишком велик!

В чем причина этой ошибки и как ее можно исправить?

1 ответ

Это связано с ограничением между Java и Groovy, требующим, чтобы байт-код метода не превышал 64 КБ. Это не связано с трубопроводом Дженкинс DSL.

Чтобы решить эту проблему, вместо использования одного монолитного конвейерного сценария, разбейте его на методы и вызовите методы.

Например, вместо того, чтобы:

stage foo
parallel([
 ... giant list of maps ...
])

Вместо этого сделайте:

stage foo
def build_foo() {
  parallel([
     ...giant list of maps...
  ])}
build_foo()

Если вы используете декларативный конвейер с общей библиотекой, вам может потребоваться рефакторинг и экстернализация глобальных переменных в новых методах. Вот полный пример:

Файл Jenkins:

@Library("my-shared-library") _
myPipeline()

myPipeline.groovy:

def call() {
    String SOME_GLOBAL_VARIABLE
    String SOME_GLOBAL_FILENAME
    pipeline {
        stages() {
            stage('stage 1') {
                steps {
                    script {
                        SOME_GLOBAL_VARIABLE = 'hello'
                        SOME_GLOBAL_FILENAME = 'hello.txt'
                        ...
                    }
                }
            }
            stage('stage 2') {
                steps {
                    script {
                        doSomething(fileContent: SOME_GLOBAL_VARIABLE, filename: SOME_GLOBAL_FILENAME)
                        sh "cat $SOME_GLOBAL_FILENAME"
                    }
                }
            }
        }
    }
}
def doSomething(Map params) {
    String fileContent = params.fileContent
    String filename = params.filename
    sh "echo $fileContent > $filename"
}
Другие вопросы по тегам