Skip to content
This repository has been archived by the owner on Mar 24, 2024. It is now read-only.

Latest commit

 

History

History

buildkit-parallelization

Теги: Docker Java Maven

BuildKit Parallelization

Разработчики проекта хотят ускорить сборку и прохождение проверок (авто-тесты, проверка 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

Подсказки

Если очень-очень верхнеуровнево, то:

  1. ./mvnw package — компиляция, Unit-тесты, сборка Uber JAR
  2. ./mvnw verifypackage + проверка CodeStyle, проверка уязвимых зависимостей, поиск багов

Детали см. в Maven Default Lifecycle

Важно: убедитесь, что вынесенные в "параллельные" stage активности действительно отрабатывают

Спойлеры

Вполне возможно, что BuildKit оптимизирует сборку таким образом, что при определённых условиях "параллельные" stage запускаться не будут

Реализация

В качестве реализации CI/CD пайплайна и Docker Registry можно использовать любые, например (из облачных и бесплатных), GitHub Actions и GitHub Packages

Разборы