Hudson을 통해 buildr 프로젝트를 빌드해보겠습니다.(블로깅이 너무 뜸한거 같아 의무방어.. -.-)

1. New Job 화면에서 프로젝트 유형으로 Build a free-style software project 를 선택합니다.



2. 추가된 Job 설정 화면의 Build 항목에서 Add build step 버튼을 눌러 Execute Windows batch command를 선택합니다.



3. Command 필드에 명령 프롬프트에서 입력하듯이 buildr 명령을 입력합니다.



4. 나머지는 평소 설정하신대로 설정하시면 됩니다.

5. Build Now를 눌러 빌드가 잘 되는 것을 확인할 수 있습니다.


간단하네요. ^^
Posted by 에코지오
,

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

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

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


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

* 조대협님 블로그 참조함

Posted by 에코지오
,

보통은 pom.xml 빌드스크립트를 프로젝트 root에 포함하지만, 개발자에게 노출되는게 싫다거나 하는 등의 이유로 외부로 빼내고 싶을 때가 있다.

그렇다면 허드슨은 프로젝트 외부에 있는 pom.xml을 이용해서 프로젝트를 빌드할 수 있는가?
허드슨에서 pom.xml의 위치를 절대 경로로 줄 수 있는가?

만약 job 타입이 maven 타입이면 불가능하다. 무조건 workspace에 대한 상대경로여야 한다. 그러니까 닥치고 프로젝트 안에만 있어야 한다는 거다. ../../my/path/pom.xml 이런 거 안통한다.

다행히 job 타입이 free style이면 pom.xml을 workspace 밖에 두는 것이 가능하다.
http://www.nabble.com/Dynamic-Views-of-Clear-Case--%3E-workspace-empty-!-td16350453.html

Posted by 에코지오
,
1. (maven을 사용한다면) pom.xml에 보고자 하는 report 플러그인을 설정
   <!-- FindBugs 리포트 생성 플러그인 -->
   <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
     <threshold>Low</threshold><!-- High, Default, Low, Ignore -->
     <xmlOutput>true</xmlOutput>
    </configuration>
   </plugin>
   <!-- PMD 리포트 생성 플러그인 -->
   <plugin>
    <artifactId>maven-pmd-plugin</artifactId>
    <configuration>
     <rulesets>
      <ruleset>/rulesets/basic.xml</ruleset>
      <ruleset>/rulesets/unusedcode.xml</ruleset>
     </rulesets>
     <sourceEncoding>${maven.compiler.encoding}</sourceEncoding>
     <targetJdk>${maven.compiler.source}</targetJdk>
    </configuration>
   </plugin>

2. 허든슨에서 관련된 허드슨 플러그인을 설치. (Manage Hudson > Manage Plugins)



3. 허드슨에서 빌드시 maven의 site goal을 실행하도록 설정하고 리포트 publish 설정(빌드 Configure 화면). 필요시 pmd.xml, findbugs.xml 같은 리포트 xml 위치 설정.


4. 이제 빌드작업 화면에서 차트를 볼 수 있다~

Posted by 에코지오
,
허드슨은 사용자가 정의한 빌드작업과 설치된 플러그인을 HUDSON_HOME 이라는 디렉토리에서 관리한다.

HUDSON_HOME 의 default 경로는 ~(사용자홈)/.huson 이며  HUDSON_HOME 환경변수를 설정하여 이 경로를
내가 원하는 곳으로 바꿀 수 있다.

Posted by 에코지오
,

뽀대나는 CVS저장소 통계 보고서를 보기위해 Maven에 stat-scm 리포트 플러그인을 끼워넣었다.

 <scm>
  <!-- SCM 연결 정보 -->
  <connection>scm:cvs:pserver:anonymous:@111.111.111.111:/SRC:HHHH</connection>
 </scm>
   ... ...
 <reporting>
  <plugins>
   <!-- SCM 통계 리포트 생성 플러그인 -->
   <plugin>
    <groupId>net.sf</groupId>
    <artifactId>stat-scm</artifactId>
    <version>1.2.0</version>
   </plugin>

주기적으로 만들기 위해 Hudson에서 site 골을 걸어놓는다.



Build Now! ................ 헉............

INFO] SCM Connection Type :cvs [INFO] Output Directory :D:\hudson-1.252\home\jobs\MyProject\workspace\target\generated-site\xdoc\statscm\ [INFO] scm log > D:\hudson-1.252\home\jobs\MyProject\workspace\target\generated-site\xdoc\statscm\scm.log [ERROR] Error Getting SCM log. java.io.IOException: CreateProcess: cvs log error=2 at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.<init>(ProcessImpl.java:81) at java.lang.ProcessImpl.start(ProcessImpl.java:30) at java.lang.ProcessBuilder.start(ProcessBuilder.java:451) at java.lang.Runtime.exec(Runtime.java:591) at java.lang.Runtime.exec(Runtime.java:464) at net.sf.statscm.SrcManager.log(SrcManager.java:77) at net.sf.statscm.StatScmMojo.executeReport(StatScmMojo.java:200) ... ....

허드슨에 cvs 실행파일 위치도 알려줬는데 뭐가 문제냐고....




cvs.exe를 시스템환경변수 PATH에 추가해 주면 된다.

http://confluence.public.thoughtworks.org/display/CC/Frequently+Asked+Questions#FrequentlyAskedQuestions-faq48

Posted by 에코지오
,
Hudson을 로컬에서 권한설정 없이 써보다가 실제 프로젝트에 설치하고 권한관리를 해야겠다 싶어 권한을 설정하는데 왜이리 헷갈리는 건지...

https://hudson.dev.java.net/security.html

허드슨을 톰캣 위에서 돌리다면 이렇게 권한을 설정할 수 있다.

1. Hudson > Manage Hudson > Configure System 화면으로 들어가서 Access Control 항목을 밑에 그림처럼 설정한다. admin 유저를 Add하고 admin 유저에게는 모든 권한. anonymous 유저에게는 조회권한만 준다.


2. 위에서 추가한 admin 유저는 톰캣에서는 role에 해당한다(첨에 이 부분이 헷갈렸다)
톰캣에서 conf/tomcat-users.xml에 허드슨에 admin 권한으로 접속할 계정을 추가한다.
<tomcat-users>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="hudson-admin" password="hudson" roles="admin"/>
  <user username="manager" password="manager" roles="manager,admin"/>
</tomcat-users>

3. 이제 허드슨의 로그인화면(오른쪽 위의 login 링크)에서 hudson-admin/hudson으로 로그인하면 된다.


Posted by 에코지오
,

허드슨에서 scp 프로토콜을 통해 서버에 접속하는 작업을 포함하는 스크립트를 실행시 인증실패 에러가 발생하면서 빌드 작업이 중단되는 경우가 있다.

아이디/패스워드 인증 방식으로 접속하더라도 스크립트에 아이디와 패스워드만 설정해 놓고 인증에 필요한 모든 준비가 다 끝났다고 안심하면 안된다.

        <sshexec host="${wasserver.ip}" username="${wasserver.username}"
         password="${wasserver.password}" trust="true" timeout="20000" failonerror="false"
         command="${wasserver.cmd.restart}" />

허드슨으로 스크립트를 실행하기에 앞서 허드슨이 설치된 머신의 커맨드 창에서 먼저 scp에 접속해서 접속인증을 획득해 주어야한다.

The authenticity of host 'xxx.xxx.xxx.xxx' can't be established.
RSA key fingerprint is 13:70:69:51:0b:84:a3:d6:fa:ab:ab:89:1a:05:2d:22.
Are you sure you want to continue connecting (yes/no)?  => 여기서 yes를 입력해야 한다.


 

Posted by 에코지오
,

허드슨의 장점 중 하나가 여러가지 플러글인을 끼워넣어 기능을 확장할 수 있다는 것인데,
그런 플러그인 중에 ftp, scp 처럼 빌드 결과물을 서버로 전송할 수 있는 플러그인이 있다.

프로젝트 통신환경이 ssh라서 scp 플러그인을 설치하고 빌드 성공후 빌드 산출물을 서버에 업로드하도록
설정을 하고 빌드를 해보았다.

빌드는 성공했으나 실제로 산출물은 업로드가 되지 않았다.
콘솔 아웃풋도 에러업이 깨끗하였고 허드슨 로그를 뒤져보아도 scp 플러그인에서 에러가 났다는 내용은 없었다.

허탈한 마음에 구글링해보니 역시나...

http://www.nabble.com/Job-using-Maven-does-not-run-SCP-plugin-td17765416.html

현재 scp 플러그인은 job이 maven 스타일인 경우 작동하지 않는 버그가 있다고 한다.

The SCP plugin does not execute with the Maven2 job type, but works fine with a free style job type.


아직은 maven style job 보다는 free style job이 안정적인 거 같다.

ps. 사용한 hudson버전은 1.252다.

Posted by 에코지오
,

Maven으로 많은 소스를 컴파일하거나 사이트 문서 생성시 메모리가 많이 필요한데,
기본 메모리로는 메모리 부족 오류가 날 수 있다.

Maven홈/bin/mvn.bat 파일에서 MAVEN_OPTS에 -Xmx 옵션을 주어 적당히 메모리를 늘려준다.

set MAVEN_OPTS=-Xmx512m

Hudson을 통해 Maven을 실행한다면 빌드Job 선택 후 Configure > Build > Advanced… > MAVEN_OPTS 필드에 아래처럼 설정한다.


Posted by 에코지오
,