nexus 구성 - http://swtest.co.kr/69


hudson + maven + nexus - http://nya.springnote.com/pages/3780941

'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
Posted by linuxism
,

[Hudson+Spring Batch] master/slave 구성하기

하나의 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)

image

 

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. 이런 식으로 확장하게 함

image

 

5. job 실행시 기본적으로 RR처럼 작동한다.

운영해보니 특정 노드(master, slave #, slave #2)에서 돌게 하는 것이 batch job 실행에 대한 안정성을 좀 더 확보하는 것 같다. job 설정에서 꼭 tie this porject to a node를 설정함

image

 

기타.

Spring Job Repository 생성해주는 job 하나 만들고 나면. 기본적인 셋팅은 끝..( 플러그인을 이용해서 notifiy, monitor 해주는 것이 필요하기는 함)

나머지는 Spring Job 만 잘 Scheduling해줄 필요가 있음.


출처 - http://knight76.tistory.com/1644



'IDE & Build > Jenkins' 카테고리의 다른 글

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
Posted by linuxism
,


1. JSON.simple Dependency

Maven을 사용한다면 pom.xml에 설정하나로 central repository에서 받아오게 설정 

  <dependency>
	<groupId>com.googlecode.json-simple</groupId>
	<artifactId>json-simple</artifactId>
	<version>1.1</version>
  </dependency>


아니면 직접 json_simple-1.1.jar를 다운 받아서 클래스 패스 설정
http://code.google.com/p/json-simple/
 

 2. Write JSON to file

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);
 
     }
 
}


Output : test.json

{
	"age":100,
	"name":"mkyong.com",
	"messages":["msg 1","msg 2","msg 3"]
}


 
3. Read JSON from file

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();
	}
 
     }
 
}



Output : 

mkyong.com
100
msg 1
msg 2
msg 3



출처 - http://jeonguk.tistory.com/38

'Development > JavaScript' 카테고리의 다른 글

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
Posted by linuxism
,