#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 ?