Требуется помощь коллективного разума…
Может кто-то сталкивался с подобной странной (для нас) ситуацией и подскажет куда смотреть.
Есть приложение мигрированное с Cuba на Jmix 1.5.5.
bootWar собирался в CI GitLab (Selfhostad) и успешно развертывался на тестовом стенде из WAR.
Т.к. есть другие приложения, расширяющие функционал основного - мы преобразовали проект в композитный.
В композитном проекте :
- Основное мигированое приложение стало аддоном с основным функционалом. По сути все в нем вплоть до экранов и Users с DatabaseUserRepository.
- Добавилось приложение-раннер. В раннере пока ничего своего - только завистмость на аддон основного функционала.
Из Jmix Studio в fatJar приложение-раннер запускается и весь функционал работает, как на уже существующей БД, так и с инициализацией новой БД.
Собираем раннера из Idea в bootWar на ПК разработчика и ручками развертываем тут же на TomCat 9 - развертывается и работает как часы.
Отдаем композитный проект в один репозитоий в GitLab, проходит сборка в CI:
- приложение-раннер собирается в bootWar и публикуется.
В итоге в bootWar, собранном в CI GitLab в persistence.xml нет сущностей аддона основного функционала.
Есть все сущности, даже из других наших аддонов, использованных в аддноне основного функционала.
Приезжает все: liquibase change-logs из нашего аддона, кастомная тема из аддона, кастомный экран логина.
Но в persistence.xml варника ни одной сущности, реализованной в самом основном аддоне.
В выводе выполнения CI ничего в глаза не бросается.
- Выполняется compileJava для аддона основного функционала
- Выполняется compileJava для приложения-раннера.
Т.е. локально у нас на на компах bootWar собирается корректно с корректым наполнением persistence.xml. Та же таска в CI GitLab выдает варик в котором в persistence.xml нет сущностей основного аддона.
CI GitLab настроен давно и работал несколько месяцев без проблем до преобразования в композитный проект и выдавал корректный bootWar.
Сейчас он предельно прост:
stages:
- publishWar
image: gradle:7.6-jdk11
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
before_script:
- GRADLE_USER_HOME="$(pwd)/.gradle"
- export GRADLE_USER_HOME
- export CI_DEPLOY_PASSWORD
publishWar-job:
stage: publishWar
script:
- echo "Start publishWar..."
- cd all
- chmod +x gradlew
#- ./gradlew :simplerunner:bootWar
- ./gradlew :simplerunner:publishWebAppPublicationToMavenRepository
На локалных ПК (где war собирается корректно) используется JDK 11 Belsoft, в CI используется OpenJDK 11.
Проверили содержимое аддона основного функционала, собранного этим же конвейером в GitLab и опубликованным в репозиторий - в артефакте аддона в persistence.xml все сущности на месте.
Провели эксперимент:
-
Создали Новый Full stack project Jmix 1.5.5 (в стороне, не в композитном проекте)
-
Удалили из него Users, шаблонные экраны и реализацию User repository.
-
Добавили зависимость на наш аддон с основным функционалом. Запушили в GitLab в отдельный репозиторий, настроив там CI по тому же шаблону, что и CI в композитном проекте.
-
В отдельном проекте-раннере в CI собрался корректный варник.
Теперь самое загадочное для нас:
-
Открываем в Jmix Studio наш композитный проект, добавляем в него средствами Studio наш новый проект раннера (из пункта 4) из существующего источника.
-
Сдаем этот дополненный композитный в GitLab,
-
CI собирает публикует варник нового проекта-раннера и в нем НЕТ сущностный основного аддона.
ЭТОТ же проект До его добавления в композитный нормально собирал варик в том же CI.
Но собирает некомплетный варник после помещения его в композитный проект.
CI работает на образе gradle:7.6-jdk11. Пробовали openjdk:11-jdk и openjdk:17-jdk - картина неменяется.
Что может подобным образом влиять на сборку композитного проекта с CI?
Вроде все перепроверили в проекте самого аддона.
Да его артефакт нормально собирается в CI persistence.xml все сущности на месте. И как мы уже проверили - для отдельного приложения-раннера варник собирается нормально в том же CI.
В каталоге all композитного проекта вроде по сути всего 2 значимых файла: build.gradle и settings.gradle.
В gradle-wrapper.properties указано на gradle 7.6 как и в подпроектах.
Что может быть не так со сборкой bootWar композитного проекта в CI?