Есть проект на чистой Java 17
Проект использует Native Image и Maven Native Plugin для компиляции в бинарный исполняемый файл формата ELF
Для сборки нужно использовать GraalVM CE Image
Сборка проходит стандартным образом, через mvn verify
с указанием профиля native
, на выходе – target/native.bin
:
file target/native.bin
target/native.bin: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked
Сервер запускается на порту, указанном через параметр port
или переменную окружения PORT
и реагирует на команду UUID
, выдавая в ответ случайный UUID
Как проверить:
- Подключаемся с помощью
nc
(netcat
) по нужному порту - Вводим
UUID⏎
, (где⏎
– Enter для отправки данных) - Получаем в ответ:
b022e6b9-957a-4f22-b519-2fb57ca76caf
(пример)
Спойлеры: пример вызова `nc` для тестирования
nc -u localhost 9999
UUID
b022e6b9-957a-4f22-b519-2fb57ca76caf
- Собрать всё с помощью Maven и Native Image (параллелить ничего не нужно, т.к. в приложении нет авто-тестов, проверок стиля кода и т.д.)
- Упаковать всё в
Scratch
- Выложить всё в виде публичного образа на GHCR (GitHub Container Registry)
При необходимости, можете внести изменения в pom.xml
(будем считать, в организации DevOps-инженерам разрешено "корректировать" по своему усмотрению сборку для адаптации к "миру контейнеров")
Рекомендуется, но не обязательно, запускать приложение не от root
- Всё должно быть оформлено в виде публичного репозитория на GitHub
- Вся сборка образов должна проходить через GitHub Actions
- Образ должен выкладываться в GitHub Container Registry (GHCR)
К текущему заданию дополнительно предъявляются требования:
- Docker Buildx Build (указывайте явно при сборке
docker buildx build
) - Multi-Stage