개발자의 길

Jenkins 배포 쉘(shell) 및 프로젝트 자동 start 본문

6. 리눅스

Jenkins 배포 쉘(shell) 및 프로젝트 자동 start

자르르 2019. 1. 23. 11:45


젠킨스에서 셋팅은 다 완료 된(webhook을 통한 git 소스 동기화) 상태에서

자동으로 shell을 통해서 배포 및 프로젝트 재시작 까지의 설명 입니다.


젠킨스 구성에서 Build 쪽에 Execute shell을 통해 미리 만들어 놓은 shell을 commend에 넣은 후에






* jenkins 서버와 실제 구동 될 웹서버가 서로 다른 물리적 서버에 있을 경우


1. jenkins 서버상에 war로(또는 jar)로 묶인 소스의 경로를 찾음

2. ssh로 실제 웹서버로 war를 옮김

3. 실제 웹서버에서 재시작 shell을 실행


project_start.sh


#!/bin/sh


SERVER_IP="10.10.10.10" #실제 웹서버

USER_ID="irteam" #접속계정

SENDING_FILE="/home1/irteam/.jenkins/workspace/project1/target/source_real.war" #jenkins상에 war경로

RECEIVE_DIR="/home1/irteam/service/project1/package/" #실제 웹서버상에 war 폴더 경로

TOMCAT_FILE="/home1/irteam/service/project1/bin/restart.sh" #실제 웹서버상에 재시작 shell

WAR_FILE="/home1/irteam/service/project1/package/source_real.war" #실제 웹서버상에 war경로

TODAY=`date "+%Y%m%d%H%M%S"`


ssh $USER_ID@$SERVER_IP cp $WAR_FILE $WAR_FILE\\_$TODAY


scp -r $SENDING_FILE $USER_ID@$SERVER_IP:$RECEIVE_DIR <<EOF

EOF


ssh $USER_ID@$SERVER_IP sh $TOMCAT_FILE


ssh로 접속할때 암호 입력없이 접속 되게끔 셋팅이 먼저 선행 되어야 한다.


아래 글 참조

<<ssh 자동로그인>>

https://jang8584.tistory.com/184



* jenkins 서버와 실제 구동 될 웹서버가 같은 물리적 서버에 있을 경우


1. jenkins 서버상에 war를 웹소스 war 경로에 복사

2. 재시작 shell 실행


project_start.sh


#!/bin/sh

SENDING_FILE="/home1/irteam/.jenkins/workspace/project1/target/source_real.war"

RECEIVE_DIR="/home1/irteam/service/project1/package/"

TOMCAT_FILE="/home1/irteam/service/project1/bin/restart.sh"


cp -r $SENDING_FILE $RECEIVE_DIR


sh $TOMCAT_FILE 



--> 문제가 발생 : start 쉘이 실행이 잘 안된다.


다른 물리 서버로 ssh로 접속하여 재시작은 문제없는데,

같은 서버로 재시작은 문제가 발생한다.


그 이유는 젠킨스가 구동이 끝나면, child process를 모두 강제로 죽여(kill)버린다.

ssh는 다른 서버의 쉘을 실행해서 이게 해당이 안되지만,

같은 서버는 restart.sh에서 실행 중인것을 모두 죽여서 startup.sh이 실행 되다 강제로 꺼진다.


해결책은


다음과 같이 BUILD_ID=dontKillMe 를 start쉘에 추가하여 해결할 수 있다


#프로젝트 kill(stop)

ps -ef | grep project1 | grep -v grep | awk '{ print $2}' | xargs kill;

# 또는 /home/war/was/apache-tomcat-6.0.37/bin/shutdown.sh


#프로젝트 start

#기존 쉘 

# /home/war/was/apache-tomcat-6.0.37/bin/startup.sh

#변경 쉘 

BUILD_ID=dontKillMe /home1/was/apache-tomcat-6.0.37/bin/startup.sh


참조

https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+build





이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments