Budowanie obrazów kontenerowych dla kotlin + ktor bez Dockera z użyciem Jib i Cloud Build

· 354 słów · do przeczytania, w minut 2

Wprowadzenie

W poprzednim artykule zbudowaliśmy aplikację Kotlin + ktor i uruchomiliśmy ją lokalnie w kontenerze dzięki Dockerfile. Co, jednak jeśli nie chcemy (lub nie możemy) instalować Dockera lokalnie?

Dzięki narzędziu Jib oraz usłudze Cloud Build możemy zbudować i opublikować obraz naszej aplikacji bezpośrednio z kodu źródłowego, bez pisania Dockerfile i bez używania Dockera.

Czym jest Jib?

[Jib](https://github.com/GoogleContainerTools/jib) to narzędzie powstałe w firmie Google, które umożliwia budowanie obrazów kontenerowych bezpośrednio z poziomu Gradle lub Maven, bez potrzeby używania Dockera.

Korzyści:

  • brak potrzeby pisania Dockerfile,

  • brak potrzeby instalowania Dockera lokalnie,

  • szybkie buildy (warstwowe cache),

  • bezpieczne – build odbywa się tylko w Javie.

Konfiguracja Jib w Gradle

W build.gradle.kts dodaj plugin:

plugins {
    id("com.google.cloud.tools.jib") version "3.4.5"
}

a następne skonfiguruj go:

val isDockerBuild = gradle.startParameter.taskNames.any { it.contains("jibDockerBuild") }
val projectId: String? = if (!isDockerBuild) {
    System.getenv("PROJECT_ID")
        ?: findProperty("projectId") as? String
        ?: error("Missing project ID. Set env PROJECT_ID or use -PprojectId=...")
} else null
val imageName = if (!isDockerBuild)
    "gcr.io/$projectId/cloud-run-ktor-hello"
else
    "cloud-run-ktor-hello-local"

jib {
    from {
        image = "eclipse-temurin:21-jre"
    }
    to {
        image = imageName
        tags = setOf("latest")
    }
    container {
        ports = listOf("8080")
    }
}

Budowanie lokalnie bez Dockera

Możesz zbudować i wypchnąć obraz do Google Container Registry:

./gradlew jib

Jeśli chcesz tylko zbudować lokalnie:

./gradlew jibDockerBuild

Budowanie w chmurze — Google Cloud Build

Możesz również zlecić budowanie obrazu do GCP:

cloudbuild.yaml

substitutions:
  _PROJECT_ID: your-project-id

steps:
  - name: 'gradle:8.14.2-jdk21'
    dir: '.'
    env:
      - "PROJECT_ID=${_PROJECT_ID}"
    entrypoint: bash
    args:
      - -c
      - |
        ./gradlew jib --no-daemon

Uruchom build:

gcloud builds submit --substitutions=_PROJECT_ID=my-best-project .

Wdrożenie na Cloud Run

Po zbudowaniu obrazu:

gcloud run deploy cloud-run-ktor-hello \
  --image gcr.io/YOUR_PROJECT_ID/cloud-run-ktor-hello \
  --region europe-central2 \
  --allow-unauthenticated

Podsumowanie

Dzięki Jib + Cloud Build możesz: - zbudować obraz aplikacji bez Dockera, - zautomatyzować deploy na Cloud Run, - uprościć CI/CD.

W kolejnym wpisie przygotujemy testy i prosty monitoring.

Inne artykuły z serii

  1. Wprowadzenie

  1. Pierwsze wdrożenie

  1. Tworzenie pierwszego projektu Kotlin z Gradle dla Cloud Run

  2. Budowanie obrazów kontenerowych dla kotlin + ktor bez Dockera z użyciem Jib i Cloud Build