ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Jenkins로 배포하기
    Devops/Jenkins 2019. 11. 4. 08:19
    반응형

    CI/CD 에 관련해서 예전 게임빌컴투스에 다닐때 팀원들과 많은 이야기를 했던것이 기억난다. PHP 를 주력으로 쓰던 회사 였고 , 자바로 새로운것들을 만들겠다고 하여 무중단 배포시스템을 구축하자는 이야기가 나왔었다. 그때 jenkins, 앤써블, rundeck 등 여러가지 조합들을 사용해서 구성하는 방법들을 이야기 했었고 어느정도는 무중단에 가까운 구성을 만들었던것 같다. 그중 핵심은 역시 jenkins 였다. 일단 빌드를 했어야 했고 추후 테스트코드를 만들어서 빌드때 돌려볼수 있는것 같지 구상했을때 그리고 예전이나 지금이나 jenkins 만한 빌드툴은 없는거 같다. 

     얼마전에 알았지만 jenkins 에 생긴 파이프라인 기능덕분에 빌드툴로만 사용되는것이 아니라 spring batch 를 컨트롤 해주는 역할도 수행 가능하다는것을 확인했다. 파이프라인이 확실히 강력하고 꼭 알아야 하는 부분인거 같다. 

     현재 회사에선 앤써블도 rundeck 도 아무것도 없다. 배포 하는 환경을보니 젠킨스로 빌드를 하고 빌드된 jar 파일을 젠킨스 서버에서 받아서 직접 해당 서버에 옴기고 실행하는 배포 구성을 가지고 있었다. 이렇게 사용할거면 그냥 자신의 로컬PC 에서 빌드해서 서버에 올리는거랑 다른게 무엇일까 ? 젠킨스를 잘알고 쓰는 사람도 없었고 관리 하는 관리자도 제대로 관리를 하지 못하고 있었다. 단순 빌드 툴로 쓰는건 다른걸 다떠나서 IDE 와 다를게 없는것 아닌가? 

     이번에 새로 조직된 팀에 속하게 되면서 CI/CD 를 구성을 새로 해보기로 했다. 일단 업무상 많은 시간을 투자 할수 없어서 jenkins 와 쉘 스크립트를 이용하여 완벽하지 않지만 CI/CD 를 구성 하는걸 생각했다. 

     

     개인적으로 쉘스크립트에 대해서 스킬이 아주 좋은 편은 아니라서 팀원의 도움을 받았고 jenkins 파이프 라인기능 사용도 많은 도움을 받았다. 팀원과 생각하는 기준은 branch 에 push 가 되면 해당 서버로 배포까지 완료 하는 부분까지다 

    아래에는 실제 젠킨스가 빌드 뒤 수행하는 작업과 옵션들이다. 

     

    일단 젠킨스에서 설정하는 화면을 기록해 두려고한다. 

    위 화면은 Job 이 시작되고 끝낸 시점에 URL Webhook 을 이용하여 메세지를 전달 하는 설정 부분이다. 사용하는 메신저 서비스가 있다면 URL 부분에 webhook URL 을 넣어주면 된다. 

    여기서 부터는 빌드에 관련된 설정이 시작된다. 사용하는 git repository 를 정해주고 git 설정을 해준다. 저부분은 검색해보면 많이 나오는 부분이라 생략한다. branch 도 지정이 가능한데 위 같은 경우는 master branch 만을 타켓으로 한것이다. addintinal Behaviorus 도 필요한 케이스 맞게 설정해 주면 되는거 같다. 

     아래 옵션을 보면 친절하게 설명이 잘되있다. 난 push 할때 이벤트를 발생하고 싶기 떄문에  push event 에 대한 설정을 해주었다. 

     

     

     

     

    Goals and options

    빌드는 Goals and options 는 모두 똑같이 적용되어 있다.

    clean compile install -Dmaven.test.skip=true

     

     

    calculate-v1-prod

    위에 마스킹된 명령어 부분을 별도로 다시 샘플을 작성했다. 아래 부분이 실제 빌드 완료 이후 작업을 수행하는 부분이며 해당되는 스크립트이다. 

     

    product1

     /var/jenkins_home/scripts/transfer.sh /var/jenkins_home test.pem testapp-v1-prod ubuntu xxx.xxx.xxx.xx testapp

    /var/jenkins_home/scripts/transfer.sh /var/jenkins_home test.pem testapp-v2-prod ubuntu xxx.xxx.xxx.xxx testapp

     

     

     

    #!/bin/sh
    
    ## 테스트 서버 전송용 스크립트
    ## 사용법 transfer.sh FILE_NAME FILE_PATH
    ## FILE_PATH 가 없으면 ~/ 로 기본 셋팅 됨
    
    # jenkins_home
    JENKINS_HOME=$1
    # PEM키 파일명
    PEM_KEY=$2
    # 전송할 파일경로
    FILE_PATH="$3/target"
    # 전송할 파일명
    #FILE_NAME=$4
    cd $JENKINS_HOME/workspace/$FILE_PATH
    FILE_NAME=`ls *jar`
    CONVERT_FILE_NAME=${FILE_NAME%.*}
    # 전송할 타겟 USERNAME
    USER=$4
    # 전송할 타겟IP
    TARGET=$5
    # 전송할 타겟 경로
    SAVE_DIR=$6
    # 날짜
    FILE_DATE=$(date '+%y%m%d%H%M%S')
    TRANSFER_FILE=${CONVERT_FILE_NAME}'_'${FILE_DATE}'.jar'
    
    cd $JENKINS_HOME/workspace/$FILE_PATH
    REGEX_FILE_NAME=`ls *jar`
    
    echo "Start transfer...  $TRANSFER_FILE"
    
    if [ -z $FILE_NAME ];then
      echo "[ERROR] File is null!! input fileName"
    else
       mv $JENKINS_HOME/workspace/$FILE_PATH/$FILE_NAME $JENKINS_HOME/workspace/$FILE_PATH/$TRANSFER_FILE
       scp -i $JENKINS_HOME/scripts/pem/toast/$PEM_KEY $JENKINS_HOME/workspace/$FILE_PATH/$TRANSFER_FILE $USER@$TARGET:$SAVE_DIR
       mv $JENKINS_HOME/workspace/$FILE_PATH/$TRANSFER_FILE $JENKINS_HOME/workspace/$FILE_PATH/$FILE_NAME
    fi
    
    echo "end Transfer completed"

    위 스크립트는 팀원의 도움으로 만들어진 스크립트이다. 적용된 서버로 파일을 전송하는 스크립트다. 

     

     당장은 이런식으로 사용중지만 앤써블이나 다른것들을 이용한  CI/CD 를 구축해보는것도 나쁘지 않을거 같다. 일단 docker를 적극적으로 사용중이기때문에 추후 쿠버네티스도 충분히 고려 해볼법한 환경은 만들어 놓았다. 한번에 완벽히 보다 당장할수 있는걸 차근차근 하나하나 해볼생각이다.

    반응형

    'Devops > Jenkins' 카테고리의 다른 글

    [docker]Jenkins 설치  (0) 2019.11.04
Designed by Tistory.