1. 개요
이 시리즈의 이전 기사에서는 Maven에서 Nexus로 배포 프로세스를 설정했습니다 . 이 기사에서는 프로젝트의 폼과 Jenkins 작업 모두에서 Maven을 사용하여 릴리스 프로세스 를 구성 합니다.
2. pom 의 저장소
Maven이 Nexus Repository Server로 릴리스할 수 있으려면 distributionManagement 요소 를 통해 저장소 정보를 정의해야 합니다.
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>
호스팅된 릴리스 저장소는 Nexus에서 기본 제공되므로 명시적으로 생성할 필요가 없습니다.
3. Maven pom 의 SCM
릴리스 프로세스는 프로젝트의 소스 제어와 상호 작용합니다. 즉, 먼저 pom.xml 에서 <scm> 요소 를 정의해야 합니다 .
<scm>
<connection>scm:git:https://github.com/user/project.git</connection>
<url>http://github.com/user/project</url>
<developerConnection>scm:git:https://github.com/user/project.git</developerConnection>
</scm>
또는 git 프로토콜을 사용하여:
<scm>
<connection>scm:git:git@github.com:user/project.git</connection>
<url>scm:git:git@github.com:user/project.git</url>
<developerConnection>scm:git:git@github.com:user/project.git</developerConnection>
</scm>
4. 릴리스 플러그인
릴리스 프로세스에서 사용하는 표준 Maven 플러그인은 maven-release-plugin 입니다. 이 플러그인의 구성은 최소입니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
<autoVersionSubmodules>true</autoVersionSubmodules>
<releaseProfiles>releases</releaseProfiles>
</configuration>
</plugin>
여기서 중요한 것은 releaseProfiles 구성이 실제로 릴리스 프로세스 중에 Maven 프로필( 릴리스 프로필)을 활성화하도록 강제한다는 것입니다.
이 프로세스에서 nexus-staging-maven-plugin 을 사용하여 nexus-releases Nexus 리포지토리에 배포를 수행합니다.
<profiles>
<profile>
<id>releases</id>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.5.1</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>nexus-releases</serverId>
<nexusUrl>http://localhost:8081/nexus/</nexusUrl>
<skipStaging>true</skipStaging>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
플러그인은 배포 프로세스( skipStaging=true )에 대해 이전 과 동일하게 스테이징 메커니즘 없이 릴리스 프로세스를 수행하도록 구성됩니다 .
또한 배포 프로세스와 유사하게 Nexus로 릴리스는 Security 작업 이므로 즉시 사용 가능한 배포 사용자 양식 Nexus를 다시 사용할 것입니다.
또한 전역 settings.xml ( %USER_HOME%/.m2/settings.xml ) 에서 nexus-releases 서버에 대한 자격 증명을 구성해야 합니다 .
<servers>
<server>
<id>nexus-releases</id>
<username>deployment</username>
<password>the_pass_for_the_deployment_user</password>
</server>
</servers>
전체 구성입니다
5. 릴리스 프로세스
릴리스 프로세스를 작고 집중적인 단계로 나누어 보겠습니다. 프로젝트의 현재 버전이 SNAPSHOT 버전(예: 0.1-SNAPSHOT )일 때 릴리스를 수행합니다 .
5.1. 릴리즈:클린
릴리스 청소 는 다음을 수행합니다.
- 릴리스 설명자( release.properties ) 삭제
- 백업 POM 파일 삭제
5.2. 릴리스:준비
릴리스 프로세스의 다음 부분은 릴리스 준비 입니다 . 이것은:
- 몇 가지 확인을 수행합니다. 커밋되지 않은 변경 사항이 없어야 하며 프로젝트가 SNAPSHOT 의존성에 의존하지 않아야 합니다.
- pom 파일의 프로젝트 버전을 전체 릴리스 번호로 변경(SNAPSHOT 접미사 제거) – 이 예에서는 – 0.1
- 프로젝트 테스트 스위트 실행
- 변경 사항 커밋 및 푸시
- SNAPSHOT 버전이 아닌 이 코드 에서 태그 를 생성합니다.
- pom에서 프로젝트 의 버전 을 높입니다 – 이 예에서는 – 0.2-SNAPSHOT
- 변경 사항 커밋 및 푸시
5.3. 릴리스:수행
릴리스 프로세스의 후반부는 릴리스 수행 입니다 . 이것은:
- SCM의 결제 릴리스 태그
- 릴리스된 코드 빌드 및 배포
프로세스의 이 두 번째 단계는 준비 단계의 출력인 release.properties 에 의존합니다 .
6. 젠킨스에서
Jenkins는 두 가지 방법 중 하나로 릴리스 프로세스를 수행할 수 있습니다. 자체 릴리스 플러그인을 사용하거나 올바른 릴리스 단계를 실행하는 표준 maven 작업으로 릴리스를 수행할 수 있습니다.
릴리스 프로세스에 초점을 맞춘 기존 Jenkins 플러그인은 다음과 같습니다.
그러나 릴리스를 수행하기 위한 Maven 명령이 충분히 간단하기 때문에 작업을 수행하기 위해 표준 Jenkins 작업을 정의하기만 하면 됩니다. 플러그인이 필요하지 않습니다.
따라서 새 Jenkins 작업(maven2/3 프로젝트 빌드)의 경우 2개의 문자열 매개변수( releaseVersion=0.1 및 developmentVersion=0.2-SNAPSHOT )를 정의 합니다.
빌드 구성 섹션 에서 실행할 다음 Maven 명령을 간단히 구성할 수 있습니다.
release:clean release:prepare release:perform
-DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}
매개변수화된 작업을 실행할 때 Jenkins는 사용자에게 이러한 매개변수에 대한 값을 지정하라는 메시지를 표시하므로 작업을 실행할 때마다 releaseVersion 및 developmentVersion 에 대한 올바른 값을 채워야 합니다.
또한 작업공간 정리 플러그인 을 사용하고 이 빌드에 대한 빌드 시작 전에 작업공간 삭제 옵션을 확인하는 것이 좋습니다. 그러나 릴리스의 수행 단계는 반드시 준비 단계 와 동일한 명령으로 실행되어야 합니다. 이는 후자의 수행 단계가 준비 에 의해 생성된 release.properties 파일 을 사용하기 때문 입니다. 이는 Jenkins 작업이 준비 를 실행 하고 다른 작업이 수행 되도록 할 수 없음을 의미합니다 .
7. 결론
이 기사에서는 Jenkins를 사용하거나 사용하지 않고 Maven 프로젝트 릴리스 프로세스를 구현하는 방법을 보여주었습니다. 배포 와 마찬가지로 이 프로세스는 nexus-staging-maven-plugin 을 사용하여 Nexus와 상호 작용하고 git 프로젝트에 중점을 둡니다.