Jib빌드 시 외부 파라미터로 active profile/tag 주입

jaycee·2023년 11월 24일
0

goals

  1. Jib 도커 이미지 빌드 시 외부 파라미터로 태그값을 주입 받아 이미지 태그값을 지정한다.
  2. 이미지를 docker run 시 빌드할 때 지정된 환경(spring active profile)에서 실행되도록 설정한다.
  3. 파라미터가 없는 경우에는 태그에 default값인 local을 입력한다. (다른 파라미터 입력 없이 이미지 빌드 시 실행까지는 가능하게 세팅하려는 의도)

구동 환경

  • aws ECR
  • spring boot 2.7.13
  • gradle 8.2.1
  • kotlin 1.8.22
  • jib 3.4.0
  • intelliJ
  • mac OS arm64

빌드 스크립트

build.gradle.kts 파일 내 빌드 스크립트를 아래와 같이 구성한다.
1. env라는 key로 주입받은 파라미터가 있으면 해당 값으로, 없으면 local을 설정한다.
2. 주입받은 env 값으로 스프링의 active profile 값을 지정한다.

jib {
    val env: String = findProperty("env")?.toString() ?: "local" //#1

    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

        image = "0*****0.dkr.ecr.ap-northeast-2.amazonaws.com/my-application"
        tags = setOf("latest-$env", tag)
    }

    container {
        creationTime = "USE_CURRENT_TIMESTAMP"

        jvmFlags =
            listOf(
                "-Dspring.profiles.active=$env", //#2
                "-XX:+UseContainerSupport",
                "-Dserver.port=8080",
                "-Dfile.encoding=UTF-8",
                "-XshowSettings:vm",
                "-XX:MinRAMPercentage=50.0",
                "-XX:MaxRAMPercentage=80.0",
            )

        ports = listOf("8080")
    }
}

빌드 커맨드

-Penv에 주입할 파라미터 값을 입력해준다.

./gradlew clean jibDockerBuild -Penv=staging

실행 결과

빌드를 실행하면 아래와 같이 도커 entrypoint와 이미지의 태그가 지정된 것을 확인할 수 있다.

Container entrypoint set to [java, -Dspring.profiles.active=staging, -XX:+UseContainerSupport, -Dserver.port=8080, -Dfile.encoding=UTF-8, -XshowSettings:vm, -XX:MinRAMPercentage=50.0, -XX:MaxRAMPercentage=80.0, -cp, @/app/jib-classpath-file, kr.co.fnf.ec.batch.MyApplicationKt]

Built image to Docker daemon as 0****0.dkr.ecr.ap-northeast-2.amazonaws.com/my-application, 0****0.dkr.ecr.ap-northeast-2.amazonaws.com/my-application:latest-staging, 0****0.dkr.ecr.ap-northeast-2.amazonaws.com/my-application:1e5c8fac87

도커 이미지를 아래 커맨드로 실행 시 active profile을 지정해도 빌드할 때 주입시킨 staging으로 기동되는 것을 볼 수 있다.

 docker run -p 18080:8080 -e --spring.profiles.active=local 148577495720.dkr.ecr.ap-northeast-2.amazonaws.com/ec-batch-v2:latest-staging

스프링 이미지 실행 로그

...
...

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::               (v2.7.13)

...
...

kr.co.fnf.ec.batch.my-application  : The following 1 profile is active: "staging"

profile
오늘도 하나 배웠다.

0개의 댓글

관련 채용 정보