CI-Jenkins 설치 및 설정

2014. 9. 12. 11:17OS/개발환경구축

사내에는 문서까지 만들어 놓고 .... 블로그에는 CI 폴더를 만들어 놓고 내용이 하나도 없다니!!!!
오늘은.. 이걸 정리해 봅시다.

몇년전 CI 서버를 처음 접했을 때는... 뭔가 했다... 뭐지 Continuous Integration ...  지속적인, 끊임없는 통합 서버 라니..
하나씩 알아가고 난 이후... 잘 쓰다보니.. 이처럼 편한것이 없었다.


정의를 한번 봅시다.


What is Jenkins?
(젠킨스이 뭐냐?)

Jenkins is an award-winning application that monitors executions of repeated jobs, such as building a software project or jobs run by cron. Among those things, current Jenkins focuses on the following two jobs:

(반복 작업들, 예를 들면 소프트웨어 프로젝트를 만들거나 cron에 의해 작동하는 것 같은 실행을 모니터링 하는 수상경력이 있는 어플리케이션 이라네요, 이런것들 사이에서 최근 젠킨스는 아래 두가지 작업에 포커싱을 맞추고 있데요)

Building/testing software projects continuously, just like CruiseControl or DamageControl. In a nutshell, Jenkins provides an easy-to-use so-called continuous integration system, making it easier for developers to integrate changes to the project, and making it easier for users to obtain a fresh build. The automated, continuous build increases the productivity.
(소프트웨어의 끊임없는 빌드 와 테스트...)

Monitoring executions of externally-run jobs, such as cron jobs and procmail jobs, even those that are run on a remote machine. For example, with cron, all you receive is regular e-mails that capture the output, and it is up to you to look at them diligently and notice when it broke. Jenkins keeps those outputs and makes it easy for you to notice when something is wrong.
(외부 실행 작업들의 실행의 모니터링...)

한글로 번역하면.. 말이 자꾸 꼬입니다...암튼 위 두가지 기능외에도 플러그인을 통한 무한한 확장이 가능하다는 점을 기억하고
자세한 내용은 
https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins  에서 직접 만나보시지요.

우린 설치하고 사용하는게 가장 필요하니 



1. Jenkins CI 설치 및 설정

사내 테스트 서버 기준으로 설치 방법을 정리 합니다. 
예를 들어 
개발 서버 주소는 내부 아이피  192.168.1.113 입니다.
서버는 Redhat Enterprise Linux release 6.4 (Santiago) x86_64 입니다.

 (1) CI 도구인 Jenkins 설치는 http://jenkins-ci.org 에서 다운로드를 받습니다.
       Download jenkins 하위의 Lastest and greatest 를 클릭하여 jenkins 를 다운로드 합니다.
       (그림에서 보다시피... war 파일이니.. 이것도 하나의 web application이지요..)

 (2) 다운받은 jenkins.war 파일을 FTP 프로그램을 이용하여 개발서버의 (경로는 제 임의대로... /data/Jenkins)로 전송합니다.
      이렇게 FTP를 통해서 하는 방법보단, 해당 서버에서 바로 다운로드 받는 방법으로 진행해주세요.

      이게 훨씬 편합니다. 

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

sudo yum install jenkins


 (3) Service Start/Stop/Restart

sudo service jenkins start/stop/restart

sudo chkconfig jenkins on

* 설치 확인  : rpm –qa | grep jenkins


 (4) 혹 위의 Jenkins.war를 다운로드 받아서 하는 방법은 아래와 같은 명령어를 입력하여 실행 합니다.

    nohup java –jar /data/jenkins.war  --httpPort= 8070 --prefix=/jenkins > /data/jenkins/logs/jenkins.log 2>&1 &

* nohup 은 리눅스,유닉스 상에서 Shall Script file을 Deamon 형태로 실행시키는 명령어 입니다.
  여기서는 java 프로세스를 실행 시키는 방법으로 포트는 8070으로 지정해서 prefix는 jenkins로, 로그파일 설정까지
  완료하였네요. 

     e.g.  --httpPort:9070 –prefix=/jenkins 의 경우 IP 주소가 192.168.1.113 이라고 한다면  
             http://192.168.1.113:9070/jenkins 로 접근이 가능해 집니다.


(5) 설치 이후에 이것 저것

- 프로세스 확인 : ps –ef | grep jenkins

- 프로세스 죽이기 : kill -9 [jenkins PID]

(yum 인스톨 후에 직접 프로세스를 죽이면, 이후 다시 프로세스를 재 가동 하는 것이 잘 안되는 현상이 있었습니다. 그리하여 sudo service jenkins stop 명령어를 활용 하시는 것이 좋겠네요.)


그럼 아래와 같은 페이지가 나타납니다.



2. 느닷없는 Maven 설치

A. apache-maven-3.X.X-bin.tar.gz 를 다운로드 받아, 특정 폴더에 넣는다.
   (download : 
http://maven.apache.org/download.cgi)

B. 자 그 폴더에서 압축을 풀어 봅시다.

    #>tar –zxvf apache-maven-3.1.1-bin.tar.gz

C.그리고 해당 폴더로 옮겨봅시다.

#>sudo mv apache-maven-3.1.1. /usr/local/maven

D.그 다음부터는 환경 설정을 진행 합니다.

#> export M2_HOME=“/usr/local/maven”

#> export M2=$M2_HOME/bin

#> export MAVEN_OPTS=“-Xms256m –Xmx512m”

#> export PATH=$M2:$PATH

E.설정 잡았으니.. 우선 설정 값에 잘 박혔는지 확인

#> export

F.위의 값이 잘 세팅되어 있다면, 이젠 maven 돌아가나 확인

#> mvn –version  



3. Jenkins CI 설정 

(1)  JDK 와 Maven 설정

   a. 좌측 메뉴의 jenkins 관리 > 시스템 설정을 클릭

   b. 개발 서버에 설치된 JDK 와 Maven 경로를 입력 한 후에 저장 버튼 클릭

       (JDK 설정시에 Oracle 계정도 기 등록해 놓아야 하는 시추에이션!!!)



(2) Jenkins 에서 관리할 프로젝트를 등록

 a. 좌측 메뉴의 새로운 Job 을 클릭

 b.관리할 Job의 이름을 기재합니다.

 c. Build a maven2/3 project 를 선택한 후에 OK

  d. Discard Old Build 를 Check 한 후에 Day to keep Builds 에 작업 기록을 유지할 일수를 입력합니다.
    - 미 지정하면 모든 작업 기록이 저장 됨.

  e. 소스코드 관리에서 Subversion을 클릭한 후에 관리하려는 프로젝트 SVN Repository 주소를 입력한다.
  -   enter credential : 여기서 클릭해서 사용자 계정 인증을 한번 받도록 하시요.


 f.  Build whenever a SNAPSHOT dependency is built 를 체크 

 g. Schedule 에 수행할 작업의 시간을 설정함.

 h. Goals ans options에 실행할 명령어를 입력 후 저장 버튼 클릭하여 등록을 완료함.


  - 빌드 트리거 
    현재 job 에 대한 build 설정* Poll SCM 을 선택하여 스케쥴링을 설정 할 수도 있음.

  - Root POM
     해당 프로젝트의 pom 파일의 이름을 입력

  - Goals and option
     프로젝트의 goal 을 입력

  - Post Steps
     Build가 완료된 후 실행 할 다른 작업을 지정할 수 있음.
    추가하고자 하는 작업이 있으면 Add Post-build step 을 선택하여 추가하고자 하는 step을 선택합니다.
    * 배포 자동화를 위해 expect 모듈을 사용하여 미리 작성해 놓은 shell script를 실행하기 위해서
       expect 명령어 후에 해당 shell script를 입력하여 사용

   - Build Settings
      build가 실패 했을 때 이메일로 정보를 받고자 할때 이메일 주소 입력

    - Post-build
      Actions현재 job 의 실행 완료 후에 같이 연동할 action 이 있을 경우 선택


   i. 위에서 등록했던 방식으로 프로젝트에서 관리할 job들을 등록하여 관리하면
      아래와 같이 각각의 프로젝트 상태를 확인 할 수 있습니다.
      (Job 의 Name 을 클릭하면 누적된 상세 작업 결과를 확인하실 수 있습니다.)

   j. 좌측의 아이콘들은 마지막 빌드 상태를 나타냅니다.
      (파랑 : Success   /  노랑 : Unstable , 빨강 : Failed)

   k. 우측 시계모양의 아이콘을 통해 해당 Job 의 즉시 빌드를 수행 할 수 있습니다.
      -     빌드를 수행하면 좌측 메뉴 하단에서 아래와 같이 빌드 실행 상태를 확인 하실 수 있습니다.





(3) 사용자 별 권한 제어

 a. 좌측 메뉴 Jenkins 관리 > Configure Global Security 클릭
 b. Enable security 체크 후 그림과 같이 세팅 후에 저장 버튼 클릭
  ==> 저장을 하면 기존과 다르게 좌측 메뉴에 사용자 , 빌드 기록 목록에만 접근이 가능하도록 변경이 됨.
 c. 관리자가 사용할 계정을 등록하는 프로세스는 우측 상단 가입 버튼 눌러 가입하면 끝!




(4) User Setting 잘못 건드렸다가.. 문제 발생시에  조치하는 방법이다.

  영역이나 권한등을 잘못 건드려서, 실제 젠킨스 설정을 더이상 할수 없을 때.. 아래와 같은 방법으로 조치합니다. 

   a. 젠킨스를 멈추세요 (servlet container를 죽이는 것이 가장 쉬운 방법이다.)
   b. 파일 시스템 내에 젠킨스가 설치된 곳($JENKINS_HOME) 으로 가서 config.xml 파일을 찾아요.
   c. 파일을 에디터에서 열어서
   d. 파일안에 <useSecurity>true</useSecurity> 요소를 찾아서 true를 false로 바꾸세요.
   e. authorizationStrategy 와 securityRealm 요소는 지우시고, 젠킨스를 시작하면 됩니다.

젠킨스으로 돌아오면 미보안 모드라서 모든 사람들이 접근이 가능합니다.
만약 아직도 작동이 안되면, 이름을 변경하거나, config.xml를 지우라고 합니다.

 


4. 나만의 배포 자동화 


1.Web Project CI와 연동하고 CI 에서 schedule 에 의한 Build 가 이뤄집니다.
2.Pom.xml 에서 설정한 plugin 에 의해 배포 서버로 최종 버전의 war 파일을 전송합니다.
3.Build 가 완료되면 CI PlugIn Deploy to Container PlugIn 을 사용해서 Tomcat manager 를 통해 war 파일 Deploy

4.Tomcat restart 까지 적용되어 배포 자동화가 완료 됩니다.




여기까지 정리 드립니다. 
이렇게 정리는 했지만, 튜토리얼 보면 보다 상세히 나와 있고, 한두번씩만 반복 하면 , 쉽게 익힐수 있다고 생각합니다.

감사합니다.