spring boot jib 를 사용 하여 배포 자동화 하기 (w. github action)
728x90
jib 란?
Jib는 Dockerfile을 사용하지 않거나 Docker를 설치할 필요 없이 컨테이너를 빌드할 수 있도록 도와주는 도구이다.
특히 자바 컨테이너를 빌드하는 데 사용하는 도구이며, Maven과 Gradle 용 플러그인을 이용해 사용할 수도 있고 Jib 자바 라이브러리를 통해 사용할 수도 있다.
적용해보기
build.gradle.kts
plugin {
...
id("com.google.cloud.tools.jib") version "3.1.2" apply false
...
}
버전은 해당 spring boot, kotlin, java 버전에 맞게 설정 이 필요하다.
val stage: String? by project // github action 에서 -Pstage=alpha 옵션으로 주입
val imageTag: String? by project // github action 에서 -PimageTag=AA-BB 옵션으로 주입
jib {
from {} // 애플리케이션을 빌드할 기본 이미지를 구성
to {} // 애플리케이션을 빌드할 대상 이미지를 구성
extraDirectories {} // 이미지에 임의의 파일을 추가하는 데 사용되는 디렉토리를 구성
container {} // 빌드된 이미지에서 실행되는 컨테이너를 구성
mainClass = ""
user = ""
ports = "" // Dockerfile 의 EXPOSE 와 유사
creationTime = "" // 컨테이너 생성 시간을 설정
}
github action 에서 환경과 imageTag 이름을 주입하기 위해 따로 변수를 생성한다.
github action
- name: Build tag, and push image with jib
id: build-image
run: |
./gradlew -PcontainerImage=${{ env.DOCKER_REPOSITORY }} -PimageTag=${{ env.IMAGE_TAG }} -Pstage=${{ env.PHASE }} jib --no-daemon
테스트 환경에서는 ECR 을 사용하여 docker image 를 관리하고 jib 에 다음과 같이 설정했다.
credHelper = "ecr-login"
jvm custom option
container {
jvmFlags = when (stage) {
"dev" -> listOf("-Xms4g", "-Xmx4g")
"prod" -> listOf("-Xms8g", "-Xmx8g")
else -> emptyList()
}
environment = mapOf("port" to 8080)
mainClass = mainClassPath
user = "user"
ports = listOf(8080)
creationTime = containerCreationTime
}
이런 식으로 튜닝도 가능하다.
체감상 docker build 에서 jib 로 바꾼뒤 캐시가 적중했을때 1분 가까이 차이가 나기도 한다.
728x90
'Kotlin > Spring' 카테고리의 다른 글
Kotlin 으로 Spring batch 시작하기 Part.1 (0) | 2022.10.29 |
---|---|
Async, CompleteableFuture 에서 RequestContextHolder 에 접근하기 (0) | 2022.10.20 |
댓글
이 글 공유하기
다른 글
-
Kotlin 으로 Spring batch 시작하기 Part.1
Kotlin 으로 Spring batch 시작하기 Part.1
2022.10.29 -
Async, CompleteableFuture 에서 RequestContextHolder 에 접근하기
Async, CompleteableFuture 에서 RequestContextHolder 에 접근하기
2022.10.20