ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Jenkins] Maven 프로젝트 Build 하기
    설치&설정 관련 2016. 10. 31. 14:09
    728x90

    프로젝트가 진행될때 가장 먼저 하는 일중 하나는 자동 배포 시스템 구축 입니다.

    이것의 존재 유무가 프로젝트에서 가장 많이 일어나는 배포의 시간을 단축 시킬 수 있습니다.

    이로 인한 생산성 증가는 전체 프로젝트 금액의 30% 이상을 차지 합니다.

    하루 2, 3회 배포시 파일을 압축하고 서버에 올리는 작업 시간을 10분으로 잡을 경우 하루 약 20, 30분을 낭비 하게 됩니다. 이는 일일 8시간 근무 기준 약 6%(30/480) 를 허비 하게 됩니다. 
    만약 파일 배포 할 서버가 2대 이상일 경우 배포 시간은 기하 급수적으로 늘어나게 됩니다.


    1. Jenkins 설치 하기

    Jenkins[1] 는 java로 만들어진 오픈 소스로 서버에 파일 배포를 지원하며, 추가적으로 100 개 이상의 플러그인이 지원되어 Linux의 crontab 을 대신하여 WEBUI 를 제공하여 배치용으로도 사용 됩니다.


    1.1. JDK 설치

    JDK 는 oracle 의 JDK와 openJDK 로 나누어 집니다. 배포가 가능한 버젼은 openJDK이며, 다음[2] 에서 확인 하여 쉽게 설치 할 수 있습니다.

    1.2. Apache Tomcat 설치

    Tomcat 은 가장 범용적이고 많이 사용되는 Java Web Application Server(WAS) 로서 무료로 다운로드 [3]및 사용이 가능합니다. core 파일을 받아서 압축을 풀고 환경 변수만 마춰주면 쉽게 기동할 수 있습니다.

    1.3. jenkins war 다운로드

    다음[4] 에서 원하는 버젼의 jenkins를 다운 로드 합니다. 이후 $TOMCAT/webapps  밑에 war 파일을 이동 후 tomcat 을 기동 하면 됩니다.


    접속 주소는 별다른 수정을 하지 않으셨다면 다음과 같습니다.


    http://localhost:8080/jenkins


    2. jenkins 설정 하기

    tomcat 기동이 완료 되면, 최초 lock을 풀기 위해 특정 위치의 암호 파일을 읽어서 web페이지에 적어 주면 설정 파일을 시작 합니다. 

    기본적으로 많이 사용하는 설정을 클릭함고 관리자 패스워드를 설정하면 대부분의 설정이 마무리 됩니다.

    3. Mavne 프로젝트 배포 생성하기

    jenkins-1

    [그림 -1] item 추가

    [그림-2] source 위치 지정(git, SVN 등..)


    [그림-3] Build 설정


    Build 설정의 goals and options 는 여러 옵션이 있으나, 기본적인 clean install 을 사용 함

    [그림-4] Build 이후 실행할 shell 지정


    자세한 shell 내용은 5번을 확인 하자

    4. Maven 프로젝트 배포 테스트

    Jekins에서 생성된 item을 실행 하면 된다

    [그림-5] Jenkins 시작 화면

    5. 2대 이상의 서버로 배포 하는 SHELL 작성

    기본적인 bash shell로 다음 샘픔을 참고 하면 쉽게 접근 할 수 있다.

    1. post Steps Shell
    #!/bin/bash

    ssh root@web "su - root -c '/home/tomcat-8.0/bin/shutdown.sh'"

    sleep 10

    scp  /root/.m2/repository/kr/pe/lahuman/api/0.8/api-0.8.war root@web:/home/tomcat-8.0/webapps/api.war

    ssh root@web  "su - root -c '/home/tomcat-8.0/bin/startup.sh'"

    ssh root@web "su - root -c /home/build-web2.sh"



    2. build-web2.sh

    #!/bin/bash



    WEBPING=0

    until [ $WEBPING == "200" ];

    do

      echo $WEBPING 

      WEBPING=$( curl -sL -w "%{http_code}\\n" "http://localhost:8097/" -o /dev/null)

      echo --- sleeping for 10 seconds

      sleep 10

    done



    ssh root@web2 "su - root -c '/home/tomcat-8.0/bin/shutdown.sh'"


    sleep 10


    scp /home/tomcat-8.0/webapps/api.war root@web02:/home/tomcat-8.0/webapps/api.war


    ssh root@web2 "su - root -c '/home/tomcat-8.0/bin/startup.sh'"


    WEBPING=0

    until [ $WEBPING == "200" ];

    do

      echo $WEBPING 

      WEBPING=$( curl -sL -w "%{http_code}\\n" "http://web2:8097/" -o /dev/null)

      echo --- sleeping for 10 seconds

      sleep 10

    done


    6. 오랜 시간이 걸리는 작업에 대한 처리

    Jenkins 에서 오랜 시간이 걸리는 작업을 실행하면 timeout을 내뱉으며 오류가 나거나, 아무런 오류없이 프로세스가 다 돌지 않고 종료가 되는 경우가 종종 있다. 


    이때 사용하는 방법은 daemonize[5]를 이용하는 방법이다.


    우선 daemonize를 설치 한다. 설치 방법은 간단하게 brew를 이용하거나, git 에서 download 를 한후, 간단하게 make & make install을 진행 하는 방법이 있다.




    Clone the Git repository

    You can also simply clone the git repository, using one of the following commands.

    $ git clone git://github.com/bmc/daemonize.git
    $ git clone http://github.com/bmc/daemonize.git
    

    Installation

    Once you’ve unpacked the source, change your working directory to the daemonize directory. From there, building and installing the code is fairly typical:

    $ sh configure
    $ make
    $ sudo make install
    

    For a detailed report of the available configure options:

    $ sh configure --help

    [참조-5] 설치 내용 발췌



    이로서 간단한 jenkins에 대한 설치에서 배포까지에 내용 정리를 마친다.


    참고 자료 :

    [1] https://jenkins.io/

    [2] http://openjdk.java.net/install/

    [3] https://tomcat.apache.org/download-80.cgi

    [4] http://mirrors.jenkins-ci.org/war/

    [5] http://software.clapper.org/daemonize/

    728x90
Designed by Tistory.