local
을 입력한다. (다른 파라미터 입력 없이 이미지 빌드 시 실행까지는 가능하게 세팅하려는 의도)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"