Liferay dxp 7.2 Jenkins CI / CD
Я работаю над автоматизацией развертывания Liferay 7.2 с использованием Jenkins, у нас есть рабочая область Liferay (исходный код) в репозитории GitLab, моя проблема в том, что я не могу клонировать только один модуль (портлет), который изменен / модифицирован, и построить его после события push в GitLab вместо этого клонирует и строит всю рабочую область, что требует времени для сборки всех модулей. Я реализовал в GitLab ловушку post commit для любых изменений в репозитории git. Подскажите, пожалуйста, как это реализовать.
1 ответ
Это действительно широкий вопрос, и он в основном будет зависеть от того, как ваша организация использует Jenkins.
С событием push вы знаете только, что оно происходит, и Дженкинс загрузит код. Он не будет клонироваться каждый раз, если вы не создадите сценарий, который это делает.
В любом случае у вас будет рабочая среда, созданная в Jenkins для представления этой работы, с эксклюзивным каталогом для нее. Чтобы воспользоваться преимуществами уже созданных модулей, вам нужно будет написать для этого свой сценарий.
Скажем, одна идея - воспользоваться Gradle (кстати, вы можете использовать тот же язык программирования, что и для Jenkins - Groovy). Вы можете начать с наличия оболочки внутри вашей рабочей области, сэкономив время на ее освоение со всеми преимуществами, которые дает оболочка Gradle, если вы живете внутри вашего проекта GitLab.
С Gradle вы можете создавать кеши, которые действительно ускоряют процесс, но это довольно сложно сделать внутри задания Jenkins, у которого есть собственный набор артефактов сборки для каждого выполнения задания. Однако вы можете использовать Gradle для проверки или выбора модулей для сборки с настраиваемой логикой.
Допустим, вы начали помечать модули файлом с именем version.propeties
или регулярный build.gradle
с индикатором типа "снимок". Это может быть использовано вашей логикой построения Gradle для выбора подпроектов вашего рабочего пространства (которое является проектом Gradle).
Но в конце концов вы можете заметить, что у вас есть группы модулей, которые могут быть в других проектах, а некоторые из них почти никогда не обновляются, вы можете поместить их в их собственное рабочее пространство. В этом нет ничего плохого.
Другой момент - убедиться, что вы используете настройки параллельного построения для Gradle и ваше оборудование соответствует задаче. Демон Gradle для ваших сборок тоже может помочь.
Существует бесконечный набор факторов, которые могут помочь, но ваша среда - ваш главный ориентир, который подскажет, что вы можете сделать. Примером этого является то, что ваш системный администратор Jenkins мог уже установить глобальный демон Gradle и глобальную среду Gradle, в которой кеш артефактов может жить для ваших зависимостей maven. Они также могли установить maven-сервер, который также действует как кеш для удаленных зависимостей...
В конце концов, он слишком широк, чтобы дать вам какой-либо конкретный совет. Но я оставлю вас с этим: сосредоточьтесь на Gradle больше, чем на Дженкинсе. Кроме того, если вы можете ускорить разрешение зависимостей и время загрузки, это очень поможет в нескольких проектах.