파란하늘의 지식창고
반응형

maven으로 jib:build 를 사용하면 보통 다음처럼 사용한다.

mvn clean deploy jib:build

그런데 빌드된 결과를 실행하면 해당 프로젝트에서 참조한 snapshot이 갱신되지 않은 이전 것을 참조하고 있는 경우가 있다.

빌드 수행 결과를 살펴보면

  1. deploy까지 maven의 배포 실행을 처리한 이후
  2. jib:build 시 다시 repository에서 빌드된 결과물을 가져와서 docker image 를 빌드한다.

jib의 경우 layer를 다음과 같이 처리한다.

github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#how-are-jib-applications-layered

 

GoogleContainerTools/jib

🏗 Build container images for your Java applications. - GoogleContainerTools/jib

github.com

  • Classes
  • Resources
  • Project dependencies
  • Snapshot dependencies
  • All other dependencies
  • Each extra directory (jib.extraDirectories in Gradle, <extraDirectories> in Maven) builds to its own layer

Snapshot dependencies과 그 외의 dependencies를 분리하여 layer를 만들며 이를 통해 snapshot이 갱신되더라도 해당 layer만 새로 만든다.

처음엔 layer에 대한 cache처리가 문제가 아닌가 의심했지만 실제 문제가 되는 포인트는 maven이 repository로 deploy를 한 후 jib:build 시 repository에서 다시 가져올 때 snapshot을 force update하지 못한 문제이다.

이를 해결하려면 처음 빌드한 명령어에 다음처럼 -U 옵션이 추가되어야 한다.

mvn -B -U clean deploy jib:build

-U는 snapshot에 대해 강제 업데이트 처리를 해준다.

-B는 batch mode인데 실행 과정에 터미널과 상호 작용 표시를 막아 로그를 간결하게 확인할 수 있게 해준다.

 

반응형
profile

파란하늘의 지식창고

@Bluesky_

도움이 되었다면 광고를 클릭해주세요