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.
Repozytorium: https://github.com/mariuszz/cloud-run-ktor-hello
Linki
Inne artykuły z serii
-
Wprowadzenie
-
Pierwsze wdrożenie
-
Budowanie obrazów kontenerowych dla kotlin + ktor bez Dockera z użyciem Jib i Cloud Build