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

spring boot project를 docker image로 만들 때 jib build를 사용한다.

mvn -B -U clean deploy jib:build

multi module project인 경우 전체 모듈 중 일부만 jib build 할 대상이 될 것이다.

이런 경우 -pl 옵션으로 대상 모듈을 따로 지정하여 jib build 하게 된다.

이 경우 다음과 같이 명령이 나뉜다.

mvn -B -U clean deploy
mvn -B -pl 모듈1,모듈2 jib:build

이 설정으로도 문제없이 동작하지만 모듈이 추가되거나 삭제될 경우 위의 ci 설정도 매번 변경해주어야 한다.

좀 더 나은 방법으로 package 시 jib build도 같이 수행해 주도록 설정을 할 수 있다.

jib-maven-plugin 설정 시 다음과 같이 설정을 추가한다.

<executions> 
    <execution> 
        <phase>package</phase> 
        <goals> 
            <goal>build</goal> 
        </goals> 
    </execution> 
</executions>

이 설정이 공통으로 사용하는 상위 모듈에 다음과 같이 추가되어 있고 (이런저런 설정은 생략)

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>${jib-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

jib build 할 모듈의 build plugin 설정에 jib-maven-plugin이 있으면

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

ci에는 단순히 다음과 같이 설정이 되어 있으면 된다.

mvn -B -U clean deploy

이렇게 설정할 경우 jib build 대상에 대한 설정 관리를 해당 프로젝트 모듈에서 하기 때문에 jib build 모듈에 대한 변경사항이 생겨도 jenkins ci에서 설정을 변경해야 하는 비용이 발생하지 않는다.
또한 모듈별 빌드를 나누어 사용할 경우에 비해 빌드 단계도 jib:build 할 모듈 수만큼 줄어들게 된다.

반응형
profile

파란하늘의 지식창고

@Bluesky_

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