'IDE & Build > Jenkins' 카테고리의 다른 글
jenkins - 설정 (0) | 2013.06.05 |
---|---|
jenkins - installation and update (0) | 2013.06.05 |
hudson과 jenkins (0) | 2012.04.25 |
Hudson master/slave 구성 (0) | 2012.04.13 |
CI Tool & Hudson (0) | 2012.04.12 |
jenkins - 설정 (0) | 2013.06.05 |
---|---|
jenkins - installation and update (0) | 2013.06.05 |
hudson과 jenkins (0) | 2012.04.25 |
Hudson master/slave 구성 (0) | 2012.04.13 |
CI Tool & Hudson (0) | 2012.04.12 |
하나의 Batch 서버에 모든 Job을 수행할 수 없는 경우 여러 대의 Batch 서버를 Slave 로 추가하고, 다수의 Slave가 Job을 분산 수행하도록 설정해야 한다.
Hudson은 이와 같은 기능을 쉽게 사용할 수 있도록 지원한다. Hudson Master는 SSH, JNLP, Window service 등의 프로토콜을 사용하여 각 서버에 Slave Agent 를 설치하는 방법을 제공한다. 나는 리눅스 SSH를 선택하여 진행하였다.
<패스워드 없이 SSH 연결>
SSH 연결시 매번 패스워드 연결이 지저분할 수 있다. 따라서 공인키를 상대방 서버에 복사하게 하여 서로 접속이 편하도록 했다. 이런 스타일은 패스워드 없이 SSH 연결을 쉽게 할 수 있다.
1.master101(master) 로 root 로 접속
# rlogin -l root master101
2./etc/ssh/sshd_config 파일 수정
아래 코드가 #(주석화) 되어 있는데 주석을 풀고 수정
# sudo vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
sshd 데몬을 재시작하는지 잘 확인
# sudo /sbin/service sshd restart
netd 재시작 : [ OK ]
xinetd 재시작 : [ OK ]
3. ssh 연결하는 slave 를 저장하고 로그 아웃
# sudo vi /etc/hosts
1.1.1.3 slave103
1.1.1.4 yagbat104
# logout
4.www계정으로 재접속
# rlogin -l www master101
5.인증키 생성
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa): 엔터
Created directory '/home/www/.ssh'.
Enter passphrase (empty for no passphrase): 엔터
Enter same passphrase again: 엔터
Your identification has been saved in /home/www/.ssh/id_rsa.
Your public key has been saved in /home/www/.ssh/id_rsa.pub.
The key fingerprint is:
dd:75:8c:e8:f7:c3:07:4c:00:12:33:d0:08:c5:63:08 www@master101
6.생성된 인증키를 확인하고 해당 공개키를 사용할 수 있도록 authorized_keys 파일에 생성한 키값을 추가한다.
# cd ~/.ssh/
# cp -RfpP id_rsa.pub authorized_keys
그리고, 이 공개키(id_rsa.pub)를 상대서버에 복사만 하면 되는 구조이다.
# cat id_rsa.pub
ssh-rsa … www@master101
authorized_keys의 파일 권한 변경
# chmod 600 authorized_keys
7.root계정으로 slave103(slave #1)로 접속
rlogin -l root slave103
8./etc/ssh/sshd_config파일 수정 (2번 과정을 실행)하고..
# sudo vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
9. /etc/ssh/sshd_config 파일 timeout 설정
slave 에서 ssh timeout을 설정하여 slave의 dissconnect 이 가능하도록 설정
ClientAliveInterval 10
ClientAliveCountMax 12
10.sshd 데몬을 재시작
# sudo /sbin/service sshd restart
9. master101(master) 연결할 수 있도록 서버 설정 하고, log out
# sudo vi /etc/hosts
1.1.1.1 master101
# logout
11.www계정으로 slave103(slave) 접속
# rlogin -l www slave103
12.인증키 생성
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa): 엔터
Created directory '/home/www/.ssh'.
Enter passphrase (empty for no passphrase): 엔터
Enter same passphrase again: 엔터
Your identification has been saved in /home/www/.ssh/id_rsa.
Your public key has been saved in /home/www/.ssh/id_rsa.pub.
The key fingerprint is:
dd:75:8c:e8:f7:c3:07:4c:00:12:33:d0:08:c5:63:08 www@slave103
13.생성된 인증키를 확인하고 해당 공개키를 사용할 수 있도록 authorized_keys 파일에 생성한 키값을 추가한다.
# cd ~/.ssh/
# cp -RfpP id_rsa.pub authorized_keys
그리고, 역시 이 공개키(id_rsa.pub)를 master(master101)에 복사만 하면 되는 구조이다.
# cat id_rsa.pub
ssh-rsa … www@slave103
14. master101(master)에 생성한 공개키(id_rsa.pub)를 slave103(slave #1)의 www 계정의 ~/.ssh/authorized_keys에 추가
# cat authorized_keys
ssh-rsa …. www@slave1031
ssh-rsa … www@master101
authorized_keys의 파일 권한 변경
# chmod 600 authorized_keys
15. slave103(slave #1)에 생성한 공개키(id_rsa.pub)를 master101(master)의 www 계정의 ~/.ssh/authorized_keys에 추가
# cat authorized_keys
ssh-rsa … www@master101
ssh-rsa … www@slave103
16. 접속 테스트
master101(master)에서 slave103(slave #1)로 ssh 접속 확인
# ssh slave103
slave103(slave #1)에서 master101(master)로 ssh 접속 확인
# ssh master101
17. 위의 방법으로 yagbat104(slave #2)도 ssh 연결 셋팅
18. 테스트
완료
<hudson plugin 설치>
hudson의 안정적인 버전인 1.361 버전을 기준으로 했을 때. 잘 붙고 괜찮은 ssh slave plugin의 버전은 0.10이다.
1. http:
//hudson-ci.org/download/plugins/ssh-slaves/0.10/ssh-slaves.hpi
을 다운받아서 허드슨 플러그인 설치
2. 신규 노드 추가(ssh)
3. 테스트
Job 설정의 " Tie this project to a node" 에서 slave1을 지정하고, execute shell을 "hostname" 으로 셋팅하고 실행한다.
결과화면에서 slave1 (slave103)에서 hostname이 나오는 것을 확인할 수 있다.
Building remotely on slave1
[test-slave1] $ /bin/sh -xe /tmp/hudson8269255461472552301.sh
+ hostname
slave103
Finished: SUCCESS
4. 이런 식으로 확장하게 함
5. job 실행시 기본적으로 RR처럼 작동한다.
운영해보니 특정 노드(master, slave #, slave #2)에서 돌게 하는 것이 batch job 실행에 대한 안정성을 좀 더 확보하는 것 같다. job 설정에서 꼭 tie this porject to a node를 설정함
기타.
Spring Job Repository 생성해주는 job 하나 만들고 나면. 기본적인 셋팅은 끝..( 플러그인을 이용해서 notifiy, monitor 해주는 것이 필요하기는 함)
나머지는 Spring Job 만 잘 Scheduling해줄 필요가 있음.
출처 - http://knight76.tistory.com/1644
jenkins - 설정 (0) | 2013.06.05 |
---|---|
jenkins - installation and update (0) | 2013.06.05 |
hudson과 jenkins (0) | 2012.04.25 |
hudson - 참고 사이트 (0) | 2012.04.14 |
CI Tool & Hudson (0) | 2012.04.12 |
<dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1</version> </dependency>
import java.io.FileWriter; import java.io.IOException; import org.json.simple.JSONArray; import org.json.simple.JSONObject; public class JsonSimpleExample { public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("name", "mkyong.com"); obj.put("age", new Integer(100)); JSONArray list = new JSONArray(); list.add("msg 1"); list.add("msg 2"); list.add("msg 3"); obj.put("messages", list); try { FileWriter file = new FileWriter("c:\\test.json"); file.write(obj.toJSONString()); file.flush(); file.close(); } catch (IOException e) { e.printStackTrace(); } System.out.print(obj); } }
{ "age":100, "name":"mkyong.com", "messages":["msg 1","msg 2","msg 3"] }
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JsonSimpleExample { public static void main(String[] args) { JSONParser parser = new JSONParser(); try { Object obj = parser.parse(new FileReader("c:\\test.json")); JSONObject jsonObject = (JSONObject) obj; String name = (String) jsonObject.get("name"); System.out.println(name); long age = (Long) jsonObject.get("age"); System.out.println(age); // loop array JSONArray msg = (JSONArray) jsonObject.get("messages"); Iterator<String> iterator = msg.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } }
mkyong.com 100 msg 1 msg 2 msg 3
JavaScript 언어 시작하기 (0) | 2012.05.18 |
---|---|
입력필드에 마우스를 클릭하면 초기문자열이 사라지게 (0) | 2012.05.11 |
JSON 예제 2 - String에서 읽기 (0) | 2012.04.13 |
JSON 예제 1 (0) | 2012.03.28 |
JSON 소개 (0) | 2012.03.27 |