Study/CI&CD
[troubleshooting] maven jib build 사용 시 snapshot update가 안되는 경우
Bluesky_
2020. 10. 22. 09:39
반응형
maven으로 jib:build 를 사용하면 보통 다음처럼 사용한다.
mvn clean deploy jib:build
그런데 빌드된 결과를 실행하면 해당 프로젝트에서 참조한 snapshot이 갱신되지 않은 이전 것을 참조하고 있는 경우가 있다.
빌드 수행 결과를 살펴보면
- deploy까지 maven의 배포 실행을 처리한 이후
- 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인데 실행 과정에 터미널과 상호 작용 표시를 막아 로그를 간결하게 확인할 수 있게 해준다.
반응형