Build і packaging — це перевірюваний результат
Dockerfile, пакувальний script або Gradle task — лише опис наміру. Артефакт стає корисним після фактичної збірки, запуску й smoke-перевірки в середовищі, близькому до чистого runner.
Пакування потрібно розглядати як узгоджений набір: build-файли, Dockerfile, Compose або команда запуску, README та EVIDENCE_LOG.md.
| Артефакт | Що підтверджує |
|---|---|
| Dockerfile | Як створюється runtime-образ |
| Compose / run script | Як підняти сервіс і передати конфігурацію |
| README.md | Як інша людина повторює build і запуск |
| EVIDENCE_LOG.md | Які команди, результати та smoke-сигнали реально виконані |
Multi-stage build і фактичні шляхи
Приклад є схемою, а не готовим Dockerfile для кожного проєкту. Назву image, версію базового образу та шлях до JAR потрібно перевірити фактично через build.gradle, результат bootJar і структуру build/libs. Не припускайте, що артефакт завжди називається app.jar.
FROM gradle:latest AS build
WORKDIR /workspace
COPY . .
RUN ./gradlew bootJar
FROM eclipse-temurin:latest
COPY --from=build /workspace/build/libs/app.jar /app/app.jar
ENTRYPOINT ["java", "-jar", "/app/app.jar"] Чистий build-контекст і відтворюваність
- використовуйте lock-файли, wrapper і зафіксовані версії там, де це підтримує проєкт;
- перевіряйте build на чистому runner, а не лише з локальним кешем;
- узгодьте README, package scripts, Gradle tasks, Dockerfile та Compose;
- не покладайтеся на вже запущений локальний сервіс або прихований .env;
- додавайте .dockerignore для .git, .gradle, node_modules, .env та зайвих output-каталогів.
build / assemble
-> image exists
-> container starts
-> health endpoint responds
-> command and result recorded Claude допомагає аналізувати, але не підміняє build
Якщо bootJar падає, спочатку діагностуйте application build. Якщо контейнер зібрався, але health endpoint не відповідає, досліджуйте runtime, порт, env і час старту. Не маскуйте failure швидким переписуванням Dockerfile.
- Передайте Claude конкретні build.gradle, Dockerfile, Compose-фрагмент і лог помилки.
- Попросіть назвати невідповідності та найменші перевірки.
- Забороніть широке редагування, dependency updates і push.
- Перевірте запропонований шлях або команду фактичним build.
- Збережіть результат і smoke-evidence окремо від вихідного коду.
Smoke-check як критерій життєздатності
| Сигнал | Що перевірити при failure |
|---|---|
| Build не створив артефакт | Gradle/npm команда, залежності та шляхи output |
| Образ не зібрався | Dockerfile, context, COPY і base image |
| Контейнер одразу завершується | entrypoint, env і runtime log |
| Health endpoint не відповідає | порт, readiness, profile і час запуску |
| Локально green, CI red | кеші, приховані змінні та відмінності runner |
docker compose build backend
docker compose up -d backend
curl --fail http://localhost:8080/actuator/health
docker compose logs backend --tail=40
docker compose down Канонічне джерело уроку · JavaRush
Відкрити матеріал JavaRush