Сбой сборки JenkinsX из-за кучи Java

#jenkins-x

#дженкинс-x

Вопрос:

Я работаю над созданием конвейера CI / CD для приложения Spring Boot на GKE с использованием JenkinsX. Как только я отправляю код в главную ветку, запускается сборка, но сборка завершается неудачно из-за недостаточного пространства кучи Java.

 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:3.2.2:war (default-war) on project location-finder-api: Error assembling WAR: Problem creating war: Execution exception: Java heap space -> [Help 1]

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-war-plugin:3.2.2:war (default-war) on project location-finder-api: Error assembling WAR: Problem creating war: Execution exception
 
 Caused by: java.lang.OutOfMemoryError: Java heap space

    at org.codehaus.plexus.archiver.zip.ByteArrayOutputStream.needNewBuffer (ByteArrayOutputStream.java:153)

    at org.codehaus.plexus.archiver.zip.ByteArrayOutputStream.write (ByteArrayOutputStream.java:192)

 

Для решения я попытался установить аргумент JVM в Docekrfile как

 CMD ["java", "-Xmx1024m","-jar", "app.jar"]
 

Но это не сработало. Это то, что я вижу при запуске сборки

   mvn -e clean deploy -Pprod

Picked up _JAVA_OPTIONS: -XX: UnlockExperimentalVMOptions -XX: UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true -XX: UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Xms10m -Xmx192m

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
 

Есть ли какой-либо способ, которым я могу установить этот параметр кучи самостоятельно?

Ответ №1:

похоже, что maven не хватает памяти, поэтому вам нужно больше памяти в вашем модуле сборки (а не в Dockerfile для вашего приложения).

в качестве быстрого теста вы можете отредактировать шаблон pod в пользовательском интерфейсе Jenkins: jx console Manage Jenkins -> Configure System затем найдите шаблон jenkins-maven pod в пользовательском интерфейсе и отредактируйте переменную _JAVA_OPTIONS среды из этого значения: https://github.com/jenkins-x/jenkins-x-platform/blob/master/jenkins-x-platform/values.yaml#L907 — попробуйте сменить -Xmx512m на что-то большее, например -Xmx912m

Как только вы нашли значение, которое подходит для ваших проектов, вы можете сделать изменение постоянным для перезапусков Jenkins, добавив это в свой myvalues.yaml — что-то вроде этого…

 # myvalues.yaml
jenkins:
  Agent:
    PodTemplates:
      Maven:
        Name: maven
        Label: jenkins-maven
        EnvVars:
          _JAVA_OPTIONS: '-XX: UnlockExperimentalVMOptions -Dsun.zip.disableMemoryMapping=true -XX: UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Xms10m -Xmx912m'
 

см. Документы по созданию / настройке сборщиков

Комментарии:

1. Это решение сработало для сборки. Но теперь проблема в том, что если я нажму URL (используя jx open —env staging), он возвращает 503. Нужно ли мне выполнять какие-либо настройки для nginx, поскольку я знаю, что Jenkinsx развертывает приложение за сервером nginx?

2. jx open работает ли в пространстве имен разработки — например, можете ли вы просмотреть Jenkins / Nexus? При установке Jenkins X должен быть установлен входной контроллер, который используется для всех сред пространств имен и всех экспортируемых сервисов / веб-приложений / REST API. Если ingress не работает, это может быть домен, который вы использовали. Вы находитесь в помещении? см. jenkins-x.io/getting-started/install-on-cluster /…

3. Да, команда jx open работает. Он выдает выходные данные для jenkins, nexus, jenkins-x-chartmuseum, jenkins-x-docker-registry, jenkins-x-monocular-api, jenkins-x-monocular-ui. Как я могу проверить, развернут ли входной контроллер? Я не в помещении. Jenkinsx развернут на движке Google Kubernetes.

4. Я переустановил jx. В журналах я мог видеть, что установлен nginx. ИНФОРМАЦИЯ [0463] установлен и настроен входной контроллер nginx. Не могли бы вы сообщить мне, как я могу исправить эту проблему?

5. Проект, над которым я работаю, уже был разработан в Spring boot. Итак, я использую импорт jx. Я проверил все демонстрации, где все демонстрационные приложения создаются с использованием jx create. Есть ли какая-либо разница в настройке среды из-за jx create. Кроме того, мое приложение не зависит от привода загрузки Spring. Обязательно ли добавлять его зависимость в pom.xml ?