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.

Концептуальна схема build → runtime
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
build / assemble
  -> image exists
  -> container starts
  -> health endpoint responds
  -> command and result recorded

Claude допомагає аналізувати, але не підміняє build

Якщо bootJar падає, спочатку діагностуйте application build. Якщо контейнер зібрався, але health endpoint не відповідає, досліджуйте runtime, порт, env і час старту. Не маскуйте failure швидким переписуванням Dockerfile.

  1. Передайте Claude конкретні build.gradle, Dockerfile, Compose-фрагмент і лог помилки.
  2. Попросіть назвати невідповідності та найменші перевірки.
  3. Забороніть широке редагування, dependency updates і push.
  4. Перевірте запропонований шлях або команду фактичним build.
  5. Збережіть результат і 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