일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- jpa entity자동
- React
- CentOS6
- swagger
- 리눅스
- memcached
- NextJS
- spring
- dto valid
- header setting
- jvm
- 초기 구축
- Next.js 14
- java8
- generate entity
- 헤더 설정
- ollama langflow
- java9
- Java
- generate pojos
- docker
- 초기 세팅
- JPA
- spring boot
- JavaScript
- custom valid
- SpringBoot
- docker 설치
- 도커
- MySQL
- Today
- Total
개발자의 길
Jenkins 배포 쉘(shell) 및 프로젝트 자동 start 본문
젠킨스에서 셋팅은 다 완료 된(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
'6. 리눅스' 카테고리의 다른 글
리눅스 JVM heap memory 모니터링하기(Jstat) (0) | 2019.10.02 |
---|---|
Apache MPM(prefork,worker) 최적화 테스트 (2) | 2019.07.16 |
리눅스 서버 상황 파악 (0) | 2018.04.04 |
[리눅스] 사용자 계정 속성 변경 [ usermod ] (0) | 2018.01.16 |
[apache] 아파치 서버 부하가 생길 경우 확인(접속자 확인) (0) | 2017.04.24 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.