Теги: Docker
Java
Maven
Разработчики проекта хотят ускорить сборку и прохождение проверок (авто-тесты, проверка CodeStyle, зависимостей и т.д.) и обратились к вам, как к эксперту по Docker, системам сборки и прочему (включая выстраивание оптимальных процессов)
Мотивация: авто-тесты, как и проверка зависимостей на уязвимости (и другие активности), могут проходить достаточно долго, поэтому почему бы их не распараллелить
Что нужно сделать: используя возможности BuildKit распараллелить сборку (компиляцию исходников и сборку Uber JAR) и служебные задачи вроде проверки CodeStyle, Unit-тестов и т.д.
Желаемый вид:
Важно: pom.xml
редактировать нельзя
Q: почему инструменты верификации нужно запускать после компиляции?
A: некоторые из них (например, SpotBugs) работают на уровне байт-кода, кроме того, проверять стиль кодирования имеет смысл только в случае, если код хотя бы компилируется, поэтому мы упростили задачу и не предлагаем вам детально разбираться в том, что конкретный плагин требует (только исходников или ещё и байт-код)
Инструкции по сборке проекта
Текущая сборка описана в файле Dockerfile
, сборка производится командой:
docker buildx build .
Используемые переменные окружения:
APP_SIGN_ALGO
— алгоритм генерации HMAC (в терминах разработчика — "подписи")APP_SIGN_KEY
— ключ для генерации HMAC (в терминах разработчика — "подписи")
Используемый порт: 8080
Команда для тестирования:
curl -X POST http://localhost:8080 -d 'secret'
Ожидаемый ответ:
b4a5151c4d6939f8df7febe32ac94c3ce0f61112cbe1d8df0e51d7f2c4d9618b
Если очень-очень верхнеуровнево, то:
./mvnw package
— компиляция, Unit-тесты, сборка Uber JAR./mvnw verify
—package
+ проверка CodeStyle, проверка уязвимых зависимостей, поиск багов
Детали см. в Maven Default Lifecycle
Важно: убедитесь, что вынесенные в "параллельные" stage активности действительно отрабатывают
Спойлеры
Вполне возможно, что BuildKit оптимизирует сборку таким образом, что при определённых условиях "параллельные" stage запускаться не будут
В качестве реализации CI/CD пайплайна и Docker Registry можно использовать любые, например (из облачных и бесплатных), GitHub Actions и GitHub Packages
- 24.10.2023 – Максим Суслов (Видео на YouTube, Репо на GitHub)