52
배배배 배배배배

Release and versioning

Embed Size (px)

DESCRIPTION

explain versionning related with release. with this could know what is trunk, branch and tag each. 배포와 관련하여 버전닝을 설명합니다. trunk, branch, tag가 왜 있고, 어떻게 사용되는지 설명합니다.

Citation preview

Page 1: Release and versioning

임도형

Page 2: Release and versioning

임도형

개발 문화삽질 증오

Page 3: Release and versioning

Case 1.

일반적인 배포 프로세스

Page 4: Release and versioning

• 프로젝트 초기 커밋

SVNtrunk

pom.xml : 0.0.1-SNAPSHOT

TEST ENV

NEXUS

Page 5: Release and versioning

• 개발 진행• pom.xml 의 버전은 변경되지 않는다 .

SVNtrunk

pom.xml : 0.0.1-SNAPSHOT

TEST ENV

NEXUS

개발

Page 6: Release and versioning

• 개발 계속 진행• 역시 pom.xml 의 버전은 변경되지 않는다 .

SVNtrunk

pom.xml : 0.0.1-SNAPSHOT

TEST ENV

NEXUS

계속 개발

Page 7: Release and versioning

SVNtrunk

pom.xml : 0.0.1-SNAPSHOTbranches

0.1.xpom.xml : 0.1.1-SNAPSHOT

TEST ENV

NEXUS

• 0.1 로 배포 준비 시작• 배포 작업을 위한 branch 0.1.x 를 생성 .• 브랜치 0.1.x 의 pom 버전을 0.1.1-SNAPSHOT 으로 변경

버전 변경

브랜치 생성

Page 8: Release and versioning

SVNtrunk

pom.xml : 0.0.1-SNAPSHOTbranches

0.1.xpom.xml : 0.1.1-SNAPSHOT

TEST ENVsome-0.1.1-SNAPSHOT.jar

NEXUS

• 브랜치 0.1.x 에서 패키징 하고 테스트 환경에 설치

설치

패키징

Page 9: Release and versioning

SVNtrunk

pom.xml : 0.0.1-SNAPSHOTbranches

0.1.xpom.xml : 0.1.1-SNAPSHOT

TEST ENVsome-0.1.1-SNAPSHOT.jar

NEXUS

• 개발 서버에서 테스트 실패 . 버그가 있다 .• 브랜치 0.1.x 에서 디버깅한다 .

테스트 실패

디버깅

Page 10: Release and versioning

SVNtrunk

pom.xml : 0.0.1-SNAPSHOTbranches

0.1.xpom.xml : 0.1.2-SNAPSHOT

TEST ENVsome-0.1.2-SNAPSHOT.jar

NEXUS

• 브랜치 0.1.x 의 pom 의 버전을 0.1.2-SNAPSHOT 으로 변경• 다시 패키징 하고 테스트 환경에 설치

설치

버전 변경 , 패키징

Page 11: Release and versioning

SVNtrunk

pom.xml : 0.0.1-SNAPSHOTbranches

0.1.xpom.xml : 0.1.2-SNAPSHOT

TEST ENVsome-0.1.2-SNAPSHOT.jar

NEXUS

• 테스트 성공하였다 . 배포 하자 .

테스트 성공

Page 12: Release and versioning

SVNtrunk

pom.xml : 0.0.1-SNAPSHOTbranches

0.1.xpom.xml : 0.1.2-SNAPSHOT

tags0.1.2

pom.xml : 0.1.2

TEST ENVsome-0.1.2-SNAPSHOT.jar

NEXUS

• 브랜치 0.1.x 를 복사하여 tag 0.1.2 를 생성 .• tag 0.1.2 의 pom.xml 의 버전을 0.1.2 로 수정

태그 생성

버전 변경

Page 13: Release and versioning

SVNtrunk

pom.xml : 0.0.1-SNAPSHOTbranches

0.1.xpom.xml : 0.1.2-SNAPSHOT

tags0.1.2

pom.xml : 0.1.2

TEST ENVsome-0.1.2-SNAPSHOT.jar

NEXUSsome-0.1.2.jar

• tag 0.1.2 에서 패키징하고 Nexus 에 업로드한다 .

패키징

업로드

Page 14: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

0.1.xpom.xml : 0.1.2-SNAPSHOT

tags0.1.2

pom.xml : 0.1.2

TEST ENVsome-0.1.2-SNAPSHOT.jar

NEXUSsome-0.1.2.jar

• 브랜치 0.1.x 의 것을 trunk 로 머징 .• trunk 의 버전은 브랜치의 버전 0.1.2-SNAPSHOT 이 되었다 .

머징

Page 15: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

0.1.xtags

0.1.2

TEST ENV

NEXUSsome-0.1.2.jar

• 배포에 사용된 브랜치 0.1.x 를 삭제 .

삭제

Page 16: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranchestags

0.1.2

TEST ENV

NEXUSsome-0.1.2.jar

• trunk 의 것으로 개발을 진행한다 .• 버전은 변경되지 않는다 .

개발

Page 17: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranchestags

0.1.2

TEST ENV

NEXUSsome-0.1.2.jar

• trunk 의 것으로 계속 개발한다 .• 이 때 trunk 의 것을 패키징하여 개발 서버에 배포하여 테스트 할수도 있다 .• 하지만 배포가 아니기에 버전관리는 고려되지 않는다 .

계속 개발

DEV serversome-0.1.2-SNAPSHOT.jar패키징 , 설치

Page 18: Release and versioning

some-0.1.2-SNAPSHOT.jar• 그냥 현재의 것을 패키징한 것이다 . 배포한 것이 아니다 .• 패키징 할 때의 소스가 확보되어 있지 않다 .

some-0.1.2.jar• 버전관리되어 배포된 것이다 .• 패키징 할때의 소스가 확보되어 있다 .(tag 0.1.2 로 )

DEV serversome-0.1.2-SNAPSHOT.jar

Page 19: Release and versioning

• 패키징되어 배포된 소스의 영구 보관을 의미 .• 그렇기 때문에 반드시 READ ONLY 이다 . • 수정도 삭제도 안된다 .

SVNtrunk

pom.xmlbranches

0.1.xtags

0.1.2

Page 20: Release and versioning

• 작업 공간을 의미 .• main 인 trunk 말고 특정 작업이 필요할 경우 생성 .• 보통 작업이 완료되면 삭제한다 .

SVNtrunk

pom.xmlbranches

0.1.xtags

0.1.2

Page 21: Release and versioning

Case 2.

특정 기능 개발을 위한 브랜치

Page 22: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

tags0.1.2

TEST ENV

NEXUSsome-0.1.2.jar

• 혹은 특정 기능 cool 의 개발을 진행할 브랜치를 생성하고 여기서 개발을 진행 .

브랜치 생성

개발

Page 23: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

tags0.1.2

TEST ENV

NEXUSsome-0.1.2.jar

• 브랜치 cool 는 개발을 진행하며 수시로 패키징하고 개발 서버에 설치해 볼 수도 있다 .• 하지만 배포가 아니기에 버전을 수정하거나 관리하지 않는다 .

개발 , 패키징

DEV serversome-0.1.2-cool-SNAPSHOT.jar설치

Page 24: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

tags0.1.2

TEST ENV

NEXUSsome-0.1.2.jar

• cool 브랜치에서의 개발과 별개로 , trunk 에서도 개발을 진행한다 .

개발

개발

Page 25: Release and versioning

Case 3.

배포 프로세스 , 한 번 더

Page 26: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.1-SNAPSHOT

tags0.1.2

TEST ENV

NEXUSsome-0.1.2.jar

• 0.2 로 배포 준비 시작• 배포 작업을 위한 branch 0.2.x 를 생성 .• 브랜치 0.2.x 의 pom 버전을 0.2.1-SNAPSHOT 으로 변경

브랜치 생성

Page 27: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.1-SNAPSHOT

tags0.1.2

TEST ENVsome-0.2.1-SNAPSHOT.jar

NEXUSsome-0.1.2.jar

• 브랜치 0.2.x 에서 패키징하여 테스트 환경에 설치

패키징

설치

Page 28: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.1-SNAPSHOT

tags0.1.2

TEST ENVsome-0.2.1-SNAPSHOT.jar

NEXUSsome-0.1.2.jar

• 테스트가 실패하였다 . 브랜치 0.2.x 에서 수정한다 .

디버깅

테스트 실패

Page 29: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.2-SNAPSHOT

tags0.1.2

TEST ENVsome-0.2.2-SNAPSHOT.jar

NEXUSsome-0.1.2.jar

• 브랜치 0.2.x 의 pom.xml 의 버전을 0.2.2-SNAPSHOT 으로 수정 .• 다시 패키징 하여 테스트 환경에 설치

패키징

설치

Page 30: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.9-SNAPSHOT

tags0.1.2

TEST ENVsome-0.2.9-SNAPSHOT.jar

NEXUSsome-0.1.2.jar

• 테스트가 계속 실패한다 . 브랜치의 버전은 계속 변경되어 0.2.9-SNAPSHOT 이 되었다 .• 이와중에 trunk 와 cool 브랜치에서는 별개의 개발이 동시에 진행되어도 무방하다 .

계속 디버깅

계속 테스트 실패

개발 진행

개발 진행

Page 31: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.10-SNAPSHOT

tags0.1.2

TEST ENVsome-0.2.10-SNAPSHOT.jar

NEXUSsome-0.1.2.jar

• 0.2.10-SNAPSHOT 에서 테스트가 성공하였다 .

테스트 성공

Page 32: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.10-SNAPSHOT

tags0.1.20.2.10

pom.xml : 0.2.10TEST ENVNEXUS

some-0.1.2.jar

• 브랜치 0.2.x 를 복사하여 tag 0.2.10 을 생성 .• 0.2 태그의 pom.xml 의 버전을 0.2.10 로 변경 .

태그 생성

Page 33: Release and versioning

SVNtrunk

pom.xml : 0.1.2-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.10-SNAPSHOT

tags0.1.20.2.10

pom.xml : 0.2.10TEST ENVNEXUS

some-0.1.2.jarsome-0.2.10.jar

• 태그 0.2 에서 패키징하고 Nexus 에 업로드

Page 34: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

coolpom.xml : 0.1.2-cool-SNAPSHOT

0.2.xpom.xml : 0.2.10-SNAPSHOT

tags0.1.20.2.10

pom.xml : 0.2.10TEST ENVNEXUS

some-0.1.2.jarsome-0.2.10.jar

• 브랜치 0.2.x 의 소스를 trunk 로 머징 .• trunk 의 버전은 0.2.10-SNAPSHOT 이 된다 .

머징

삭제

Page 35: Release and versioning

Case 4.

이미 배포된 버전의 핫 픽스

Page 36: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)0.1.x

pom.xml : 0.1.2-SNAPSHOTtags

0.1.20.2.10

TEST ENV

NEXUSsome-0.1.2.jarsome-0.2.10.jar

• 배포한 0.1.2 에서 버그가 발견되었다 . 핫픽스하여 배포하여야 한다 .• tags 0.1.2 를 카피하여 브랜치 0.1.x 생성• 브랜치 0.1.x 의 pom.xml 의 버전을 0.1.2-SNAPSHOT 으로 수정

브랜치 생성

Page 37: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)0.1.x

pom.xml : 0.1.3-SNAPSHOTtags

0.1.20.2.10

TEST ENVsome-0.1.3-SNAPSHOT.jar

NEXUSsome-0.1.2.jarsome-0.2.10.jar

• 0.1.x 의 버전을 0.1.3-SNAPSHOT 으로 수정 .• 패키징하고 개발환경에 설치 .

설치

버전 수정

Page 38: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)0.1.x

pom.xml : 0.1.3-SNAPSHOT.jartags

0.1.20.2.10

TEST ENVsome-0.1.3-SNAPSHOT.jar

NEXUSsome-0.1.2.jarsome-0.2.10.jar

• 테스트 성공 .

테스트 성공

Page 39: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)0.1.x

tags0.1.20.1.30.2.10

TEST ENVNEXUS

some-0.1.2.jarsome-0.1.3.jarsome-0.2.10.jar

• 브랜치 0.1.x 를 카피하여 tag 0.1.3 를 생성 . 버전을 0.1.3 으로 변경 • tag 0.1.3 에서 패키징하고 , 업로드 .• 브랜치 0.1.x 를 trunk 로 머징 . 버전은 0.2.10-SNAPSHOT 을 유지 .

업로드

머징

tag 생성

작업 브랜치 삭제

Page 40: Release and versioning

Case 5.

특정 기능의 브랜치 배포

Page 41: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)1.0.x (pom.xml : 1.0.1-SNAPSHOT)

tags0.1.20.1.30.2.10

TEST ENVNEXUS

some-0.1.2.jarsome-0.1.3.jarsome-0.2.10.jar

• 오래 개발해 오던 기능 cool 개발이 완료되었다 .• trunk 에서 복사하여 브랜치 1.0.x 를 생성• 브랜치 1.0.x 의 버전을 1.0.1-SNAPSHOT 로 변경

브랜치 생성

Page 42: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)1.0.x (pom.xml : 1.0.1-SNAPSHOT)

tags0.1.20.1.30.2.10

TEST ENVNEXUS

some-0.1.2.jarsome-0.1.3.jarsome-0.2.10.jar

• 브랜치 cool 을 브랜치 1.0.x 로 머징 .

머징

Page 43: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)1.0.x (pom.xml : 1.0.1-SNAPSHOT)

tags0.1.2, 0.1.3, 0.2.10

TEST ENV1.0.1-SNAPSHOT.jar

NEXUSsome-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar

• 브랜치 1.0.x 를 패키징하고 테스트 환경에 설치 .

설치

패키징

Page 44: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)1.0.x (pom.xml : 1.0.1-SNAPSHOT)

tags0.1.2, 0.1.3, 0.2.10

TEST ENV1.0.1-SNAPSHOT.jar

NEXUSsome-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar

• 테스트가 성공하였다 .

테스트 성공

Page 45: Release and versioning

SVNtrunk

pom.xml : 0.2.10-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)1.0.x (pom.xml : 1.0.1-SNAPSHOT)

tags0.1.2, 0.1.3, 0.2.101.0.1 (pom.xml : 1.0.1)

TEST ENVNEXUS

some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jarsome-1.0.1.jar

• 브랜치 1.0.x 를 복사하여 tag 1.0.1 을 생성 . 버전을 1.0.1 으로 수정 .• 패키징하고 업로드

업로드

버전 수정 , 패키징

tag 생성

Page 46: Release and versioning

SVNtrunk

pom.xml : 1.0.1-SNAPSHOTbranches

cool (pom.xml : 0.1.2-cool-SNAPSHOT)1.0.x (pom.xml : 1.0.1-SNAPSHOT)

tags0.1.2, 0.1.3, 0.2.101.0.1

TEST ENVNEXUS

some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jarsome-1.0.1.jar

• 브랜치 1.0.x 를 trunk 에 머징 . trunk 의 버전은 1.0.1-SNAPSHOT 이 됨 .

머징

Page 47: Release and versioning

SVNtrunk

pom.xml : 1.0.1-SNAPSHOTbranches

cool1.0.x

tags0.1.2, 0.1.3, 0.2.101.0.1

TEST ENVNEXUS

some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jarsome-1.0.1.jar

• 기능 cool 개발에 사용된 브랜치 1.0.x 를 삭제 .

두 브랜치 삭제

Page 48: Release and versioning

기타

Page 49: Release and versioning

제시된 예는 예일뿐이다 .회사마다 정책이 다르고 , 실 운영도 다르다 .• micro version 사용 여부• branch 이름• 버전에 release, rc 표기• 테스트 환경에 따른 버저닝 방법 .

Page 50: Release and versioning

‘rc’ in some-2.3.1-rc.jarRelease Candidate; 배포 후보 .alpha, beta 테스트 이후의 배포 전 단계 .

Page 51: Release and versioning

특정 버전에 대한 배포 단계를 의미1.2-a1(1st alpha test version)1.2-b1(1st beta test version)1.2-b2(2nd beta test version)1.2-rc1(1st release candidate version)1.2-rc2(2nd release candidate version)1.2-r(release version)1.2-r2(release version with another bug fixed)1.2-r3(release version with 2nd bug fixed)

Page 52: Release and versioning

some-3.5.6.jar

3 : major version. 아주 굵직한 변경 . 하위호환포기면 무조건 Major.5 : minor version. 기능 추가 .6 : micro/patch/build/revision version. 버그 픽스 , 사소한 변경 .