통합빌드를 수행하기 위해 전체 소스를 SCM(소스저장소)에서 취합하는 방식은 2가지로 나뉜다.

1. 체크아웃 방식
-매번 새로 전체 소스를 SCM으로부터 체크아웃 받음
-소스의 양이 많을 경우 내려받는 시간이 오래걸림
-항상 깨끗한 상태의 소스를 이용하므로 스테이징/운영 서버에 배포하기 위한 용도에 적합

2. 업데이트 방식
-처음 한번만 전체 소스를 체크아웃 받고 그 이후로는 변경된 소스만 SCM으로부터 업데이트 받음
-변경된 소스만 받아오므로 상대적으로 시간이 덜 걸림
-순전히 빌드오류를 잡아내어 피드백을 주기 위한 빌드에 적합(?)


* 위 2가지는 다시 무조건 최신 소스를 가져오느냐 아니면 특정 버전(태그)의 소스만 가져오느냐로 나뉠 수 있다.
* Hudson에서는 빌드Job 선택 > Configure > Source Code Management > Advanced… > ‘Use Update’ 옵션 체크시 2번의 업데이트 방식이 적용된다.

* 조대협님 블로그 참조함

Posted by 에코지오
,

Hudson을 이용한다면 scm 저장소로부터 (메이븐 타입의) 프로젝트를 체크아웃/업데이트 받아서 특정 goal/phase를 실행하는 일은 Hudson의 몫이다. 그러니까 보통은 메이븐타입 프로젝트의 pom.xml로는 프로젝트 자체를 scm에서 체크아웃/업데이트 받는 일은 안한다.

하지만 허드슨을 이용하지 않고 허드슨의 일을 대신해서 프로젝트 소스를 scm으로부터 받아와서 빌드/배포 goal을 실행해야 하는 상황이라면 어떻게 해야할까?

scm에서 체크아웃/업데이트하고 프로젝트 안의 pom.xml에 대해 goal을 실행하는 쉘스크립트를 짜는 것도 한가지 방법일 수 있지만 이러한 작업을 하는 또다른 pom.xml을 만드는 것도 가능하다. maven-scm-plugin 플러그인을 이용하면 된다.

 <scm>
  <connection>scm:svn:https://127.0.0.1:8443/svn/XXX</connection>
 </scm>
 ... ...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-scm-plugin</artifactId>
    <version>1.1</version>
    <configuration>
     <connectionType>connection</connectionType>
     <scmVersionType>tag</scmVersionType>
     <scmVersion>${scm.version}</scmVersion>
     <checkoutDirectory>workspace</checkoutDirectory>
     <workingDirectory>workspace</workingDirectory>
     <skipCheckoutIfExists>true</skipCheckoutIfExists>
     <username>user</username>
     <password>user</password>
     <goals>clean test war:inplace</goals>
     <profiles>env-staging</profiles>
    </configuration>
 </plugin>

위처럼 pom.xml을 만들어 놓고 scm:bootstrap 을 실행하면 메이븐은 checkoutDirectory로 지정된 workspace에 프로젝트 소스를 체크아웃 받는다. 체크아웃 받은 뒤에 프로젝트 root의 pom.xml에 대해서 <goals/>에 나열된 goal을 실행해준다.

mvn -Dscm.version=RB123 scm:bootstrap
Posted by 에코지오
,