ci-cd-containerization-advisor

작성자: kotlin

재현 가능한 빌드, 이미지 및 배포 파이프라인을 설계합니다. Kotlin 및 Spring 애플리케이션을 대상으로 하며, CI 검증, 계층형 컨테이너, 롤아웃 안전성 등을 포함합니다.

npx skills add https://github.com/kotlin/kotlin-backend-agent-skills --skill ci-cd-containerization-advisor

CI CD Containerization Advisor

Source mapping: Tier 3 specialized skill derived from Kotlin_Spring_Developer_Pipeline.md (SK-23).

Mission

Turn a codebase into a repeatable artifact and a safe deployment process. Treat CI, container images, and rollout strategy as one delivery system, not disconnected YAML and Dockerfile fragments.

Read First

  • Build files, wrapper config, and artifact packaging approach.
  • Current CI workflow definitions and caching strategy.
  • Dockerfiles or buildpack usage.
  • Deployment manifests, Helm charts, or platform-specific deployment descriptors.
  • Runtime assumptions: JDK version, JVM options, health probes, config injection, migration process.

Build Pipeline Rules

  • Make the wrapper and toolchain the source of truth for build reproducibility.
  • Keep CI stages explicit:
    • dependency resolution
    • compile
    • tests
    • packaging
    • security or policy checks
    • publish
  • Cache deliberately, but never in a way that hides reproducibility issues.
  • Publish immutable versioned artifacts; avoid "mystery latest" promotion paths.

Container Rules

  • Prefer multi-stage builds or buildpacks that produce minimal, reproducible runtime images.
  • Run as non-root.
  • Pin base image families deliberately and know their tradeoffs:
    • glibc vs musl
    • distroless vs debug-friendly
    • JRE vs full JDK
  • Keep image layers stable so dependency and application changes cache efficiently.
  • Separate build-time secrets from runtime secrets.
  • Align container memory and CPU assumptions with JVM container-awareness and runtime limits.

Deployment Rules

  • Define readiness, liveness, and startup probes that reflect real application behavior.
  • Coordinate schema migrations with rollout order deliberately.
  • Use rolling, canary, or blue-green strategies based on blast radius and compatibility constraints.
  • Prefer configuration injection that is explicit and auditable.
  • Record image version, git revision, and effective configuration linkage in the deployed artifact or metadata.

Advanced Delivery Traps

  • Alpine or musl-based images can break native dependencies, DNS behavior, or performance assumptions. Smaller is not always safer.
  • A fast CI cache can hide missing lockfiles, flaky dependency resolution, or undeclared build inputs.
  • Running migrations inside app startup may work locally and deadlock rollout safety in production.
  • Layered jars help build speed, but only if the Dockerfile or buildpack order preserves dependency-cache reuse.
  • Distroless images improve hardening but reduce debugging options. Know the operator tradeoff.
  • Health probes that are too eager can create crash loops during cold startup or migration windows.
  • Resource requests and limits interact with JVM heap sizing, GC, and startup time. Container configuration is part of application performance.
  • Supply-chain controls such as SBOM, vulnerability scanning, signature, and provenance are part of delivery quality for serious systems.

Runtime Delivery Nuances

  • PID 1 signal handling, graceful shutdown, and preStop hooks determine whether rolling deploys drain traffic cleanly or drop requests.
  • Read-only root filesystems, writable temp directories, and filesystem permissions are runtime design choices, not just hardening checkboxes.
  • Digest-pinned base images improve reproducibility but require deliberate patching strategy to avoid silent drift or stale images.
  • Hermetic or near-hermetic builds reduce "works only in CI" surprises by making network, timestamp, and undeclared tool dependencies visible.
  • Remote build cache can be a speed win or a correctness trap depending on how well task inputs are modeled.
  • Preview or ephemeral environments can catch config and migration issues early, but only if they use realistic secrets, networking, and backing services.

Expert Heuristics

  • Make local, CI, and production use the same major JDK and Gradle assumptions whenever possible.
  • Prefer one clean deployment path over several partially maintained ones.
  • Design deployment gates around rollback confidence and blast radius, not only around green unit tests.
  • Prefer one debug-friendly escape hatch in operations even if production images are hardened and minimal.
  • Treat supply-chain metadata as something operators may depend on later for incident response, not only for compliance.
  • If the service needs graceful drain or long request handling, prove shutdown behavior under rollout in tests or staging, not only by configuration reading.
  • If zero-downtime matters, force deployment and migration strategy to prove backward compatibility, not just assume it.
  • Design the pipeline so that a failed deploy is cheap to stop and cheap to roll back.

Output Contract

Return these sections:

  • Artifact strategy: how the service is built and packaged.
  • CI plan: stages, caches, gates, and artifact publication.
  • Container plan: image build strategy, hardening, and runtime assumptions.
  • Deployment plan: probe design, rollout strategy, config injection, and migration coordination.
  • Operational risks: what could go wrong during build or deploy.
  • Verification: the checks that prove the pipeline is reproducible and the rollout is safe.

Guardrails

  • Do not use floating production image tags.
  • Do not run as root without a strong reason.
  • Do not assume the same Docker or CPU environment locally and in CI unless proven.
  • Do not couple schema migration execution to app boot casually.
  • Do not optimize image size at the expense of runtime correctness or operability.

Quality Bar

A good run of this skill gives the team a build and deployment path that is repeatable, observable, and rollback-aware. A bad run outputs a fashionable Dockerfile and CI YAML that still leave runtime drift and deployment risk unresolved.

kotlin의 다른 스킬

configuration-properties-profiles-kotlin-safe
kotlin
Design and diagnose Spring configuration, profiles, and `@ConfigurationProperties` binding for Kotlin applications. Use when property binding fails,…
official
dependency-conflict-resolver
kotlin
Diagnose and resolve Gradle and Spring classpath conflicts, version drift, and binary incompatibilities in Kotlin applications. Use when `NoSuchMethodError`,…
official
domain-decomposition-api-design-advisor
kotlin
구현을 시작하기 전에 비즈니스 범위를 경계 컨텍스트, 모듈 또는 서비스 경계, 워크플로우, API 계약으로 분해합니다. 새로운 것을 설계할 때 사용하세요.
official
error-model-validation-architect
kotlin
Kotlin과 Spring 서비스를 위한 일관된 API 검증 및 오류 처리 동작을 설계하고 구현합니다. 오류 페이로드를 정의하거나 프레임워크를 매핑할 때 사용합니다.
official
gradle-kotlin-dsl-doctor
kotlin
Generate, debug, and repair Kotlin + Spring Gradle builds with minimal, compatible changes. Use when `build.gradle.kts` or `settings.gradle.kts` is failing,…
official
integration-resilience-engineer
kotlin
탄력적인 HTTP, 메시징, 예약 통합을 Kotlin 및 Spring 서비스용으로 설계하며 명시적인 타임아웃 예산, 재시도, 멱등성, 서킷 브레이커를 포함합니다.
official
jackson-kotlin-serialization-specialist
kotlin
Kotlin과 Jackson을 사용하는 Spring 애플리케이션에서 JSON 직렬화 및 역직렬화 동작을 진단하고 설계합니다. DTO 역직렬화 실패 시, 기본값…
official
java-kotlin-migration-assistant
kotlin
Spring 기반 코드베이스에서 동작, 공개 계약, 프레임워크 호환성, 바이너리 가정을 변경하지 않고 Java 코드를 Kotlin으로 마이그레이션합니다. 단, …
official