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
댓글을 사용할 수 없습니다.