홈 › CI/CD › 04 / 7

빌드 산출물과 버전

섹션 7진행 0 / 7

4. 응용 변형 예제

4.1 Maven pom.xml 로 버전 한 곳 관리

xml
<project>
  <version>1.2.0</version>
  <build>
    <finalName>app-${project.version}</finalName>
  </build>
</project>

${project.version} 을 산출물 이름과 매니페스트 양쪽에서 참조하면 <version> 한 줄만 바꿔도 전체가 맞춰집니다.

4.2 Gradle 로 매니페스트 자동 설정

groovy
jar {
    archiveBaseName = 'app'
    archiveVersion = project.version
    manifest {
        attributes 'Main-Class': 'Main',
                    'Implementation-Version': project.version
    }
}

build.gradle 의 jar 태스크에 매니페스트 속성을 직접 지정하는 방식으로, VERSION 파일 대신 project.version 을 씁니다.

4.3 CI 에서 git describe 로 버전 자동 생성

bash
VER=$(git describe --tags --always)
sed -i "s/^version=.*/version=$VER/" gradle.properties

태그가 있으면 v1.2.0, 태그 뒤 커밋이 더 있으면 v1.2.0-3-gabc1234 형태가 됩니다. 사람이 버전을 손으로 바꿔 적을 필요가 없습니다.

4.4 체크섬을 릴리스 노트에 첨부

text
## 다운로드
- app-1.2.0.jar
  SHA-256: 229f342724e019e765b2561bc8d15b61c87fd55aa61b40c8b74435754d028a62

릴리스 노트에 체크섬을 함께 적어 두면, 내려받은 사람이 sha256sum -c 로 직접 검증할 수 있습니다. 06 레슨의 GitHub Release 작성과 이어집니다.

4.5 Nexus 에 스냅샷과 릴리스 저장소 분리

저장소 용도
app-snapshots -SNAPSHOT 버전, 계속 덮어써짐
app-releases 정식 버전, 한 번 올리면 변경 금지

개발 중에는 스냅샷 저장소에 자주 올리고, 태그를 찍어 정식 릴리스가 되면 릴리스 저장소로 승격합니다. 릴리스 저장소는 같은 버전을 다시 올리지 못하게 막아 실수로 덮어쓰는 사고를 방지합니다.