허드슨 마스터 서버외에 다른 서버에서 허드슨 마스터의 서버를 통제받고 싶다면 허드슨 슬레이브를 추가하면 된다. 

1.슬레이브 서버에 허드슨 슬레이브 jar 다운로드

우선, 슬레이브가 추가될 서버에서 마스터에 접속해 라이브러리를 받아야한다.

다음과 같이 허드슨 마스터 URL 하위에 붙여서 라이브러리를 다운 받는다.

download_slave.sh
shell> mkdir hudson
shell> cd hudson
shell> wget http://yourserver:port/jnlpJars/slave.jar

2. 관리콘솔에서 허드스 슬레이브 서버 등록

hudson 관리콘솔에서 Manage/Manage Nodes 페이지로 접속한다.


2.1 '신규노드'를 클릭한다.



2.2 노드명 입력

노드명을 입력한다. 슬레이브가 설치되는 서버명을 입력하고 'OK' 를 클릭한다.



2.3 기본 정보 입력

노드의 기본 정보를 입력하는데, 주요 필수 속성은 다음과 같다. 잘 입력해주자.

PropertyDescriptionExample
Name관리콘솔에서 식별하는 슬레이브 서버(노드)명

demo-app

 

#of executors
작업이 한번에 돌아가는 수. 일반적으로 cpu 코어의 수 만큼 맞춘다.1
Remote FS root

슬레이브 서버의 hudson slave 가 설최드는 물리적인 경로

slave.jar 파일이 받아진 위치를 지정한다.

/home/slothink/hudson
Launch Method

마스터와 슬레이브 연결 지정방식이다.

  • Launch slave agents vis JNLP : JNLP 프로토콜을 이용해서 슬레이브에서 마스터로 접속한다.
  • Launche slave via execution of command on the Master : 마스터에서 커맨드 입력을 통해 슬레이브로 접속한다.

여기에서는 JNLP 프로토콜을 사용하도록 한다.

 



2.4 Tool Location 입력

그리고 엄청 중요한 노드 속성들을 입력한다.

Node Properties 의 Tool Locations 를 설정하지 않으면, 해당 툴을 이용한 작업들이 원격(슬레이브)에서 실행되지 않는다.

슬레이브 서버에 존재하는 툴에 대한 물리적인 경로를 입력해준다.



'save' 를 클릭한다. 그러면 다음과 같이 추가된 노드를 볼 수 있다. 



아직 슬레이브 연결을 하지 않았으므로 공포의 X가 보인다.

3. Hudson Slave 연결

이제 노드 관리 화면에서 방금 추가한 노드를 선택하면 다음과 같은 화면이 나온다.



여기서 나온 실행명령어를 슬레이브 서버의 허드슨 디렉토리(slave.jar 있는 곳)에서 실행한다.

slave-start.sh
java -jar slave.jar -jnlpUrl http://source.comas.co.kr:12080/hudson/computer/demo-app/slave-agent.jnlp

콘솔에 Connected 라는 메시지가 나오고 관리 콘솔에 다음과 같이 나오면 정상 연결된것이다.



4.작업 생성

이제 작업을 원격에서 실행할 수 있도록 하면 된다.

4.1 새 작업 생성

'새 작업' 을 클릭한다. 

기본 작업명 하고, 이건 알아서 스스로 어린이.



4.2 실행할 노드 선택

그리고 'Restrict where this job can be run' 을 체크한다.

작업을 실행할 슬레이브 노드 선택방법에 따라 다음과 같이 선택한다.

ValueDescription
Node and label menu특정한 노드를 선택한다.
Advanced Node and Label expressions

표현식으로써 여러개의 노드를 선택할 수 있다. 예로 들어

aix1 -> aix2 -> demo-app 라고 지정하면, aix1 번에서 작업 후, aix2 에서 작업 후, 마지막으로 demo-app 에서 작업하게 된다.

자세한 것은 오른쪽의 도움말 참조.


그리고 저장하고 실행해본다.


Building remotely on ... 가 나오면 이제 울면 된다. TT-TT 

이제 진정한 노가다 배포에서 해결할 준비가 되었다.

Nexus 에 배포(deploy)할 때, 400 에러가 날 경우 (보통 릴리즈 버젼) 에는 넥서스의 리파지토리의 중복 등록 허용이 불가로 설정되어있을 경우 그러하다.

err.log
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy (default-deploy) on project ecm-parent: Failed to deploy artifacts: Could not transfer artifact com.comas.solme.ecm:ecm-parent:pom:5.0.0 from/to releases (http://nexus.yourcompany.co.kr:8081/nexus/content/repositories/releases): Failed to transfer file: http://nexus.yourcompany.co.kr:8081/nexus/content/repositories/releases/com/comas/solme/ecm/ecm-parent/5.0.0/ecm-parent-5.0.0.pom. Return code is: 400 -> [Help 1]

다음과 같이 'Allow Redeploy'로 바꿔주자.



  1. BlogIcon 서류 2013.12.17 16:03

    구글링하다 따뜻한 한글 문서가~ 권한문제인 줄로만 알고 삽질하다ㅋ 감사합니다.

    • BlogIcon slothink 편현장 2014.01.02 11:06 신고

      도움이 되셨다니, 참 다행이네요. 댓글까지 달아주니, 포스팅 하는 것에 대한 보람을 느낍니다. 감사해요 ㅠ_ㅠ

pom.xml 의 build plugins 하위에 다음의 플러그인 속성을 추가한다.
이후에는 install 또는 deploy 시 자동으로 소스까지 같이 배포된다.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
       <executions>
       <execution>
<id>attach-sources</id>
<goals>
    <goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>


$Prompt>mvn deploy

  1. BlogIcon NYA 2009.11.18 17:00

    오홍 이 녀석이었군요. 저는 deploy 에 뭔가 옵션이 있을까 했는데... 별도 플러그인으로 execution 으로 넣는거네요. 근데 goal 이 deploy 가 아니라 jar 라서 갸우뚱 하게 되네요..

    • BlogIcon slothink 편현장 2010.03.17 10:46 신고

      만들어지는 결과물 형식에 대해서 goals 이 정해집니다. 그래서 결과물이 xxx-sources.jar 가 되지요. 만약 테스트 소스도 결과물을 만들어 내고 싶으면 <goals> 안에 <goal>test-jar</goal> 까지 넣으시면 된답니다. 메이븐을 쓰는 사람이 있으니 반갑네요^^

+ Recent posts