release and versioning

52
배배배 배배배배

Upload: dohyoung-rim

Post on 21-Jun-2015

718 views

Category:

Software


1 download

DESCRIPTION

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

TRANSCRIPT

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. 버그 픽스 , 사소한 변경 .