brunch

You can make anything
by writing

C.S.Lewis

by 서오석 Jan 20. 2016

Rundeck

세팅하는 김에 정리나 같이 하자.

회사에서 배포로 쓰는 녀석들이 젠킨스go(go.cd), webistrano 등등  여러 가지가 있는데 최근에 커멘드 형 배포 툴이 좀 필요해서 찾다가 rundeck을 써보기로 했다. 

결론적으로 나쁘지 않았고.. 언젠가 세팅하는 것 좀  기록해야겠다고 생각하다가 배포 서버 옮기는 김에 정리하는 셈 치고 써본다. 


rundeck이 궁금하면 요기에서 자세하게 보면 된다.


사실 얘는 딱히 설치랄게 없다. jar를 실행시켜주면 끝난다..; 

> java -jar rundeck-launcher-2.6.2.jar &

그럼 해당 디렉터리에 아래와 같은 여러 가지 디렉터리가 생긴다. 

etc
libext
projects
server
tools
var

중요한 건 java로 run을 한 위치에 해당 폴더 등이 생기니까 rundeck이란 디렉터리 안에 jar를 옮기고 거기서 실행시키는 것이 좋다. 


위에 폴더 중에 중요한 게 하나 있는데 projects라는 폴더이다. rundeck에서 프로젝트를 만들면 해당 설정이 저 projects에 위치하게 된다. 

그리고 rundeck에서 command를 수행시키는 위치는 기본적으로 jar 파일이 있는 곳이 root가 된다.

무슨 이야기냐면

cd /home/fennec.fox/rundeck/
java -jar rundeck-launcher-2.6.2.jar &

위처럼 하게 되면 rundeck에서 ls -l 이란 명령어를 던지면

drwxr-xr-x 2 fennec.fox root     4096 Jan 20 15:08 etc
drwxr-xr-x 3 fennec.fox root     4096 Jan 20 15:08 libext
drwxr-xr-x 2 fennec.fox root     4096 Jan 20 15:08 projects
-rw-r--r-- 1 fennec.fox root 86155030 Jan 20 14:20 rundeck-launcher-2.6.2.jar
drwxr-xr-x 9 fennec.fox root     4096 Jan 20 15:07 server
drwxr-xr-x 4 fennec.fox root     4096 Jan 20 15:07 tools
drwxr-xr-x 4 fennec.fox root     4096 Jan 20 15:08 var

라고 결과가 나온다. 

그래서 소스를 컴파일하거나 뭔가 스크립트를 수행하거나 하려면 

mkdir /home/fennec.fox/rundeck/source 

형태로 밑에 폴더를 만들어서 거기를 기준으로 path를 잡거나 해야 한다. 


여담으로 rundeck은 Springboot + grails + h2 db를 사용해서 만들어졌다. 


이제 http://localhost:4440으로 로그인하자. 기본 암호는 admin / admin 일 것이다. (...?)


New Project를 생성하면 

projects 밑에 같은 이름의 Project 폴더가 생긴다. 

이 폴더 안에는 etc,  acls라는 2개 폴더가 존재하게 되는데 etc는 project의 configuration 파일이 있고 acls는 acls 설정에 대한 configuration 파일이 생긴다. 


Sample이란 프로젝트를 만들었다고 가정하고 프로젝트 안에 readme.md 파일을 만들자.

여기서 파일을 만들면 rundeck의 project configuration에서 해당 readme 파일을 수정할 수 있게 된다.

touch /home/fennec.fox/rundeck/projects/Sample/readme.md

그리고 해당 프로젝트에서 사용하는 노드(서버를 추가하자.)

이게 좀 의아한 게.. 프로젝트는 rundeck 웹에서 만들 수 있는데 왜 node는 xml 파일을 수정하게끔 했는지 잘 모르겠다..;

vi /home/fennec.fox/rundeck/projects/Sample/etc/resources.xml

서버 추가는 다음처럼 하면 된다.

<project>
  <node name="rundeck server" description="Rundeck (2Core / 4G / Virtual)" tags="Deploy"
    hostname="서버 호스트명" osArch="amd64" osFamily="Linux" osName="centOS" osVersion="6.7 (Final)"
    username="fennec.fox" />
</project>

이러면 프로젝트에서 rundeck node를 볼 수 있다. 


좀 더 나아가 보자.


Git에서 소스를 당긴 다음 이걸 빌드하고 서버로 쏘려면 어떤 설정이 필요할까? 

일단 중요한 건.. Git의 경우 Deploy Key를 등록해야 하는데 이게 1개 Key는 1개 Repository와 매핑돼서 

Repository안에 여러 프로젝트를 만들게 된다면 Rundeck이 있는 서버의 ssh pub를 여러 개 만들어서 등록해줘야 한다는 점이다.


예를 들어 

Git의 같은 레파지토리에 Sample1, Sample2 이렇게 2개 프로젝트가 있다고 가정하자.

Rundeck으로 1,2 프로젝트 모두 빌드하려면 1,2에  접근할 ssh key를 등록해야 하는데 이때 

> ssh-keygen -t rsa 
Enter file in which to save the key (/home/deploy/.ssh/id_rsa): Sample1 
....

> ssh-keygen -t rsa 
Enter file in which to save the key (/home/deploy/.ssh/id_rsa): Sample2 
....

이렇게 2개 pub 를  생성한 후 각각 git의 Deploy Key로 등록해야 한다. 

그다음 host 별로 key를  선택할 수 있도록 config를 설정해야 한다.

cat > ~/.ssh/config
Host GitHost1
    Hostname github.com
    User git
    IdentityFile ~/.ssh/Sample1
Host GitHost2
    Hostname github.com
    User git
    IdentityFile ~/.ssh/Sample2
ctrl + c 

그리고 git에서 clone을 할 때 다음과 같이 하면 소스를 당겨 올  때. ssh의 config 대로 다른 key를 이용해서 처리하게 된다.

git clone -b master git@GitHost2:FraudDetection/Sample1.git source/Sample1


Rundeck이 좋은 점이 Job만 잘 만들어두면 이곳저곳 공유해서 잘 쓸 수 있다는 점이다.

해서 Job 2가지를 공유해 본다.


Git을 gradle로 빌드하는 job이다. git의 repository는 변경해야 한다.

rundeck이 있는 서버에서 다른 서버로 컴파일된 소스를 전송하는 job이다. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari