반응형

Maven - Deployment Automation


(원문 위치 : http://www.tutorialspoint.com/maven/maven_deployment_automation.htm )

프로젝트 개발에서 보통 개발 프로세스는 아래 단계로 구성된다.

- SVN 또는 소스코드 저장소세어 프로세스내 모든 프로젝트로부터 코드를 체크인하고 태그한다.

- SVN에서 완전한 소스코드를 다운로드 한다.

- 프로그램을 빌드한다.

- WAR 또는 EAR인 빌드 아웃풋을 공통 네트워크 장소에 저장한다.

- 네트워크로부터 파일을 가지고 오고 배포사이트(production site)에 파일을 배포한다.

- 날짜로 문서를 갱신하고 프로그램의 버전을 갱신한다.

Problem Statement

위에 언근된 개발 프로세스에는 보통 다수의 사람이 있다. 하나의 팀이 코드의 체크인을 관리할 것이고 다른 팀이 빌드를 관리하는 등등.. 다수의 팀환경 때문에 그리고 관련된 수동의 노력 때문에 어떤 단계가 빠질 개연성이 있다. 예를 들면, 낡은 빌드는 네트워크상에서 교체되지 않을 수 있고 개발팀에 그 낡은 빌드가 다시 배포될 수 있다.

Solution

결합으로 개발 프로세스를 자동화 한다.

- Maven - 프로젝트를 빌드하고 릴리즈하기 위해

- subVersion, 소스코드 저장 - 소스코드를 관리하기 위해

- 그리고 원격 저장소 관리자(Jfrog/Nexus) - 프로젝트 바이너리를 관리하기 위해

Update Project POM.xml

자동화된 릴리즈 프로세스를 생성하기 위해 Maven Release plug-in을 사용할 것이다.


예를 들어 : bus-core-api 플로젝트 POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>bus-core-api</groupId>
   <artifactId>bus-core-api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging> 
   <scm>
      <url>http://www.svn.com</url>
      <connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/
      Framework</connection>
      <developerConnection>scm:svn:${username}/${password}@localhost:8080:
      common_core_api:1101:code</developerConnection>
   </scm>
   <distributionManagement>
      <repository>
         <id>Core-API-Java-Release</id>
         <name>Release repository</name>
         <url>http://localhost:8081/nexus/content/repositories/
         Core-Api-Release</url>
      </repository>
   </distributionManagement>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.0-beta-9</version>
            <configuration>
               <useReleaseProfile>false</useReleaseProfile>
               <goals>deploy</goals>
               <scmCommentPrefix>[bus-core-api-release-checkin]-<
               /scmCommentPrefix>
            </configuration>
         </plugin>
      </plugins>
   </build>
</project>

POM.xml에서 아래는 우리가 사용한 중요 요소이다.

ElementDescription
SCM

Configures the SVN location from where Maven will check out the source code.
(Maven이 소스코드를 체크아웃하는 SVN 위치를 설정한다.)

Repositories

Location where built WAR/EAR/JAR or any other artifact will be stored after code build is successful.
(빌드가 성공한 이후 만들어진 WAR/EAR/JAR 또는 다른 인공생성물-artifact이 저장될 위치)

Plugin

maven-release-plugin is configured to automate the deployment process.
(Maven-release-plugin은 개발 프로세스를 자동적으로 하기위해 설정되어진다.)

Maven Release Plug-in

Maven은 maven-release-plugin을 사용하여 아래 유용한 작업을 수행한다.

mvn release:clean

최종 릴리즈 프로세스가 성공하지 못한 경우 작업공간(workspace)를 청소한다.

mvn release:rollback

최종 릴리즈 프로세스가 성공하지 못한 경우 작업영역 코드와 설정에 적용된 변화를 롤백한다.ㅏ

mvn release:prepare

다수의 명령(operations)을 수행한다.

- commit되지 않은 로컬변화가 있는지 점검한다.

- SNAPSHOT 의존관계들이 없음을 확인한다.

- 프로그램의 버전을 바꾸고 릴리즈할 버전에서 SNAPSHOT을 제거한다.

- SVN에 pom파일을 갱신한다.

- 테스트케이스를 수행한다.

- 수정된 POM 파일을 commit한다.

- subversion에 코드를 tag한다.

- 버전 넘버 증가와 이후 릴리즈를 위한 SNAPSHOT을 추가한다.

- SVN에 수정된 POM파일을 commit한다.

mvn release:perform

이전에 정의된 태그를 사용하여 코드를 체크아웃하고 war또는 저장소에 만들어진 인공물을 배포하기 위해 Maven deploy goal을 수행한다.


콘솔을 열고 C:\ > MVN > bus-core-api 디렉토리로 가서 아래 mvn 명령을 수행하자.

C:\MVN\bus-core-api>mvn release:prepare

Mven은 프로젝트 빌드를 시작할 것이다. 빌드가 성공하면 아래 mvn 명령을 실행하자.

C:\MVN\bus-core-api>mvn release:perform

빌드가 성공한 이후 저장소에서 JAR파일이 갱신된 것을 조회할 수 있다.

반응형

+ Recent posts