2010. 6. 30. 16:40
IT
목적 : 유휴 장비를 추가로 빌드서버로 사용하고 master node에서 통합하여 관리
방법 : 유휴 장비를 선정하여 slave를 설치한다.
준비사항 : jdk 1.4 이상, ant 1.7 이상, 접속 가능한 hudson master node
절차
- slave 선정
당연히 놀거나, 빌드서버의 노고를 덜어줄수 있는 장비면 된다. OS 무관.
대신 jnlp agent 접근을 위해 ssl 이나 특정 tcp 포트에 접속이 가능해야 한다.
(여기서는 jnlp slave agent 를 위한 tcp port 오픈으로 작업했다.) - hudson server에서 slave.jar 카피
참고자료에서는 가능한 버전을 동일하게 가기 위해서 wget 같은 방법을 사용하여 복제하는 것을 권고 하고 있다.
현재 hudson의 slave.jar 를 내려받는 방법은
$HUDSON_MASTER/jnlpJars/slave.jar
ex) http://myhudsonserver:80/jnlpJars/slave.jar - hudson master jnlp tcp port setting
hudson master server의 hudson 관리 > Configure System > TCP port for JNLP slave agents 값을 Random 또는 Fixed 로. (특정 포트만 오픈하는 경우에는 Fixed) - hudson master node에서 new node 추가
hudson master server에서 hudson 관리 > Manage Nodes > New Node >
Node Name : 원하는 노드명. 참고자료에서는 slave hostname을 추천. 해보니 괄호 같은건 인식안됨
Remote FS root : slave의 작업 root 절대패스
Labels : slave들을 논리적으로 grouping 짓기 위한 명칭
나머지는 default 값. - slave.jar 실행
실행명령은 다음과 같다.
java -jar slave.jar -jnlpUrl http://myhudsonserver:80/computer/허드슨슬레이브노드이름/slave-agent.jnlp - 빌드JOB 설정을 slave node에서 실행되도록 변경
JOB의 Configurer 화면으로 이동하여
Tie this project to a node 를 체크하면 노드 또는 Label을 선택할수 있게 된다.
이때 주의할 것은 서버에 종속되는 정보를 빌드스크립트에 전달할 목적으로
Build > Invoke Ant 의 Targets 항목에 -propertyfile /a/b/c.properties 등을 추가해두었다면
반드시 slave 서버의 로컬경로 내에 해당 파일이 존재해야 한다는 것.
추가 : 특정 서버에 종속되야 할 경우 Tie를 반드시 시켜둘것 (아니면 hudson이 지맘대로 서버를 돌려버린다. 장점이자 주의사항이다. ) - 기타...
ant 확장 library (ftp, svn 등)가 slave에도 배포되었는지 확인할 것 -
회고
좋은점 :
웹배포 job들을 분리하여 좀더 깔끔해졌고, 배포형상이 틀어지는 것을 피할 수 있었다. (기존엔 웹리소스만 업데이트 하고 싶은데, 소스나 서버 프로그램들이 업데이트 되는 문제가 있었다.)
기존 빌드시간을 단축할 수 있게 되었다 (웹 배포만 1분넘게 걸린다.)
제한된 자원을 보다 효율적으로 사용할 수 있게 되었다.
아쉬운점 :
처음에 분산빌드를 준비하기 위한 좋은 가이드를 찾지 못해 작업중간에 시간을 낭비했다. (slave.jar 는 실행했는데,, 그담에 뭘해야 하지?? ) 다음엔 좋은 가이드를 먼저 찾는데 좀더 시간을 투자하자.
점점 빌드서버 구조가 복잡해지고 있는데, 정리를 못하고 있다.
계속할것 :
통상 PJT가 파일서버, 형상서버 두대 정도는 가지고 있으니, 가용장비를 적절하게 활용할 수 있도록 구성을 해주는 것도 좋을듯 싶음.
이 글은 스프링노트에서 작성되었습니다.