https://cloud.google.com/java/getting-started/jib?hl=ko
Jib는 구글에서 만든 컨테이너 이미지 빌드 작업을 간편화 시킨 툴이다.
위 Jib 문서에서는 GCP를 이용한 방법이 소개되어있는데, AWS에서도 사용가능하고 이번 태스크에서는 AWS를 이용한 방법을 적용한다.
기존 jib 없이 도커라이징하여 푸시를 하기 위해서는 아래와 같은 절차와 환경을 구성을 하고 작업을 수행해야 한다.
텍스트로 보면 당연히 해야하고 단순해 보이는 작업이지만, 각 단계별로 세팅하고 확인해야할 것도 많아진다. 신규 입사자나 devops가 이슈 트래킹을 위해 빌드 절차를 확인해본다고 생각해보면 위 과정을 하나하나 확인해야한다.
Jib를 이용하면 docker 어플리케이션과 Dockerfile없이 docker image를 생성하고 외부 리포지토리에 푸시도 할 수 있다.
결과적으로 아래와 같이 간편하게 구성할 수 있다.
이외에도 구글 Jib을 사용하면 빌드가 빠르고 레이어별 구성을 할 수 있다.
gradle 8.2.1
java 17
kotrlin 1.8
spring boot 2.7.X
intelliJ
mac OS arm64
build.gradle.kts에 플러그인을 추가한다.
plugins {
id("org.springframework.boot") version "2.7.13"
...
...
id("com.google.cloud.tools.jib") version "3.4.0"
}
플러그인 추가 후 프로젝트를 새로고침하면 gradle에 Jib 의존성이 추가된다.
build.gradle.kts에 jib 스크립트를 추가한다.
jib {
from {
image = "amazoncorretto:17"
}
to {
val versionDetails: groovy.lang.Closure<com.palantir.gradle.gitversion.VersionDetails> by extra
val details = versionDetails()
val tag: String = project.findProperty("tag") as? String ?: details.gitHash //도커 이미지에 git commit hash를 박아넣는다.
image = "1*****0.dkr.ecr.ap-northeast-2.amazonaws.com/my-application"
tags = setOf("latest", tag)
}
container {
creationTime = "USE_CURRENT_TIMESTAMP" //이걸 넣어야 빌드시간이 제대로 찍힘
jvmFlags =
listOf(
"-XX:+UseContainerSupport",
"-Dserver.port=8080",
"-Dfile.encoding=UTF-8",
"-XshowSettings:vm",
"-XX:MinRAMPercentage=50.0",
"-XX:MaxRAMPercentage=80.0",
)
ports = listOf("8080")
}
}
jibDockerBuild
를 더블 클릭하여 빌드 실행
jibDockerBuild
는 이미지 빌드만 하고 이미지 push를 하지는 않는다. 이미지 푸시를 하려면 ./gradlew jib
명령어를 실행한다. 이미지 리포지토리 구성이 안된 로컬이나 테스트 환경에서는 jibDockerBuild
를 이용해서 일단 빌드가 잘되는지를 확인할 수 있다.
./gradlew clean jibDockerBuild
💡 빌드 시 파라미터를 주입시키려면
-Penv=dev
형태의 파라미터를 빌드 명령어 뒤에 붙여주고 빌드 스크립트에서 이 파라미터를 받아서 사용하면 된다.
gradlew jib
명령어를 사용하면 이미지 리포지토리에 푸시까지 수행한다. 그러므로 credential을 취득해야한다.
./gradlew clean jib -x test -Penv=${{ steps.expect-environment.outputs.APPLICATION_ENV }}
생성한 이미지는 아래 커맨드로 확인 및 실행이 가능하다.
docker images
docker run 0***0.dkr.ecr.ap-northeast-2.amazonaws.com/my-application:latest