jgitflow를 사용하여 Java+Maven 프로젝트 릴리즈를 쉽게하는 법

소프트웨어개발에 있어서 릴리즈는 중요한 절차중에 하나입니다. 여기서 얘기하려는 것은 릴리즈를 쉽게 하려는 것인데 적용대상은 아래조건이 만족해야 합니다.

– SCM(Source Code Management) : git
– Language : java
– Build system : maven

git 을 SCM 으로 사용하며 브랜치를 관리하는 것은 다양한 방식이 있을 수 있습니다만 어느정도 보편화 되어있는 git-flow 를 먼저 얘기드려야 할듯합니다.

git-workflow-release-cycle-2feature
source : http://blogs.atlassian.com/2013/04/git-flow-comes-to-java/

git-flow는 안정브랜치(master), 개발브랜치(develop), 기능브랜치(feature/*) 를 나누어서 개발하고 이들간의 관계를 정리하는데 있습니다. 또한 이걸 쉽게 적용할 수 있는 명령도구도 제공되죠. 여튼 git-flow 에서 사용되는 브랜치의 규칙을 찾아보면 다음과 같습니다.

1. 안정(Stable) 브랜치 : master
2. 개발(develop) 브랜치 : develop
3. 기능(feature) 브랜치 : feature/{ISSUE}
4. 핫픽스(hotfix) 브랜치 : hotfix/{ISSUE}
5. 릴리즈 브랜치 : release/{VERSION}
참고. 버전관리용 태그 : {VERSION}

git-flow 에 대해서는 구글링을 하면 많이 나오기도하고 좋은 컨텐츠가 많기때문에 굳이 설명하지 않고 넘어가도록 하겠습니다. ( 참고. http://dogfeet.github.io/articles/2011/git-flow.html ) git-flow 를 사용하고 있고 Java + Maven 프로젝트에서 릴리즈를 하기 위해서 거치는 단계는 아래와 같습니다.

1. 개발 브랜치에서 배포 브랜치 생성
2. Bump version : maven modules (pom.xml)
3. 원격 저장소에 릴리즈 브랜치 배포(git push)
4. 테스트 서버에 배포 후 테스트 진행
5. 배포 하기로 결정
6. 릴리즈 브랜치에서 안정화 브랜치로 머지작업
7. 원격 저장소에 안정화 브랜치 배포(git push)
8. 실 서버에 배포

1 ~ 8 의 단계에서 몇가지 단계들은 사실 귀찮은 작업들(git checkout, maven pom file 수정, merge conflict)이며 진행하는데 작업시간들이 들어가고 실수가 생길 수 있는 여지가 있습니다. 사실 이게 필요하지만 귀찮고 또한 시간도 잡아 먹죠.위와같은 작업들이 일반적으로 한다면 다음과 같은 명령어 실행하고 진행해야 합니다.

git flow release start 1.0
mvn release:prepare -DreleaseVersion=1.0
mvn release:perform
git tag 1.0
git flow release finish 1.0
merge conflict and need to resolve ;(

1 ~ 8 의 과정을 겪은 사람들이 귀찮은 작업을 줄이고자 JIRA, Sourcetree로 유명한 Atlassian 에서 근무하는 Jonathan Doklovic 사람이 maven release plugin 으로 만들어서 오픈소스로 공개했습니다. jgitflow (https://bitbucket.org/atlassian/maven-jgitflow-plugin) 입니다.

jgitflow 를 자세히 설명한 자료
http://blogs.atlassian.com/2013/05/maven-git-flow-plugin-for-better-releases
https://bitbucket.org/atlassian/maven-jgitflow-plugin/wiki/Home

jgitflow 를 사용하면 1~2의 단계를 다음과 같이 줄일 수 있습니다.

명령어 : mvn jgitflow:release-start

➜  usergrid-stack git:(develop) mvn jgitflow:release-start
......
[INFO] --- maven-jgitflow-plugin:1.0-alpha8:release-start (default-cli) @ usergrid ---
[INFO] Checking for SNAPSHOT version in projects...
[INFO] ensuring origin exists...
What is the release version for "org.usergrid [org.usergrid]"? (org.usergrid:usergrid) [0.0.28]:
What is the release version for "org.usergrid.config [org.usergrid]"? (org.usergrid:usergrid-config) [0.0.28]:
......
➜  usergrid-stack git:(release/0.0.28)

6 ~ 7 의 단계를 다음과 같이 줄일 수 있습니다.

명령어 : mvn jgitflow:release-finish

적용은 쉽습니다. pom.xml 파일에 다음 플러그인 설정을 해주시면 됩니다.

<build>
    <plugins>
        <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-jgitflow-plugin</artifactId>
            <version>1.0-alpha26</version>
            <configuration>
                <!-- see goals wiki page for configuration options -->
            </configuration>
        </plugin>
    </plugins>
</build>

몇 단계 아닌거 같지만 실제 작업량은 해당 단계에서 많이 잡아먹으니 적용을 고려해도 좋을거 같습니다.😉

설정 내용이 문서로 정리된게 없으니 설정을 하시려면 다음 소스를 보고 넣으시면 됩니다.
https://bitbucket.org/atlassian/maven-jgitflow-plugin/src/9d1b93be8bfc4c863f1ade7ac5f618fe15aa2ad0/src/main/java/com/atlassian/maven/plugins/jgitflow/ReleaseContext.java

2013.12.05 추가.
1. maven-jgitflow-plugin 버전업(1.0-alpha8->1.0-alpha26)
2. 설정 소스코드 설명 추가

jgitflow를 사용하여 Java+Maven 프로젝트 릴리즈를 쉽게하는 법”에 대한 7개의 생각

    1. 덧글을 늦게 봤습니다. 해결되셨는지요? 음… 혹시 이렇게 하셔도 안되시나요~?
      mvn clean jgitflow:release-finish -DskipTests=true

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중