일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 젠킨스
- 자바
- 레디스
- 클러스터
- 간단
- fastcampus
- 예제
- config
- Cluster
- login
- redash
- 자동
- Jenkins
- java
- SpringBoot
- hive
- aws
- Mac
- Zeppelin
- Redis
- gradle
- 머신러닝
- Docker
- spring
- 설정
- ec2
- 로그인
- vue
- Kafka
- EMR
- Today
- Total
코알못
[Jenkins] 젠킨스 배포 자동화 (with. gradle, git) 본문
우리에게는 5가지의 업무가 있다!
이걸 자동화 해주는게 바로 Jenkins!
아래 자동화에 등록할 업무를 살펴보자!
- [젠킨스 서버] 젠킨스와 깃을 연동하여 해당 브랜치에 맞는 소스를 받아온다.
- [젠킨스 서버] 받아온 소스를 gradle 을 통해 빌드 하여 jar 파일로 만든다.
- [젠킨스 서버] 운영 서버에 있는 프로세스 STOP 스크립트를 실행한다.
- [젠킨스 서버 > 운영 서버] 만든 jar 파일을 운영 서버 라이브러리 폴더에 옮긴다.
- [젠킨스 서버] 운영 서버에 있는 프로세스 START 스크립트를 실행한다.
배포 완료!
운영 서버에 띄울 프로젝트는 아래 이전 포스팅한 간단한 프로젝트로 진행 하겠다.
사전에 운영 서버에 프로세스 start , stop 하는 스크립트를 만들어 둔다.
- JAR_HOME : jar 파일 경로
- P_NAME : 프로세스 명으로 프로세스 찾을때 유용함
- LOG_DIR : 로그 저장 경로
- JAVA_HOME : 자바 경로
- > $LOG_DIR 2>&1 & : (>) LOG_DIR 에 로그를 이어 쓰며, (&) 백그라운드로 실행하며, (2>&1) 표준에러를 표준 출력으로 한다. (=에러를 해당 로그경로에 출력하겠다는 뜻)
* 참고
- 2>&1 를 안하면, ssh 로 해당 스크립트 실행시 종료 되지 않는 이슈가 발생한다.
- & 를 안하면 백그라운드로 실행 되지 않아 젠킨스 서버에서 해당 스크립트 실행 프로세스를 종료하면 해당 프로세스도 종료된다.
// start_run_a.sh
#!/bin/bash
JAR_HOME=/Users/hongyoolee/IdeaProjects/multi-module/run-a/build/libs/run-a-1.0.0-SNAPSHOT.jar
P_NAME=MULTI_MODULE_RUN_A
LOG_DIR=/Users/hongyoolee/logs/service_a.log
JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home/bin/
$JAVA_HOME/java -jar $JAR_HOME -Dname $P_NAME > $LOG_DIR 2>&1 &
//stop_run_a.sh
#!/bin/bash
P_NAME=MULTI_MODULE_RUN_A
PID=`ps -ef | grep $P_NAME | grep -v grep | awk '{print $2}'`
if [[ -z "$PID" ]];
then(
echo "start proceess not running !!!"
)else(
kill -9 $PID
echo "stop process pid : "$PID
)
fi
// start_run_b.sh
#!/bin/bash
JAR_HOME=/Users/hongyoolee/IdeaProjects/multi-module/run-b/build/libs/run-b-1.0.0-SNAPSHOT.jar
P_NAME=MULTI_MODULE_RUN_B
LOG_DIR=/Users/hongyoolee/logs/service_b.log
JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home/bin/
$JAVA_HOME/java -jar $JAR_HOME -Dname $P_NAME > $LOG_DIR 2>&1 &
//stop_run_b.sh
#!/bin/bash
P_NAME=MULTI_MODULE_RUN_B
PID=`ps -ef | grep $P_NAME | grep -v grep | awk '{print $2}'`
if [[ -z "$PID" ]];
then(
echo "start proceess not running !!!"
)else(
kill -9 $PID
echo "stop process pid : "$PID
)
fi
자 그럼 시작해보자!
테스트 환경은 젠킨스 서버와 운영 서버를 동일한 로컬 서버에서 진행했음을 참고해라 (실제 구성시는 맞는 IP 를 입력해서 하면 된다)
- 젠킨스 프로젝트 생성
1. [젠킨스 서버] 젠킨스와 깃을 연동하여 해당 브랜치에 맞는 소스를 받아온다. (main 브랜치 소스를 가져온다.)
- 해당 소스는 아래 경로에 받아진다
$ cd /Users/hongyoolee/.jenkins/workspace/Multi-Module (젠킨스설치경로/workspace/젠킨스프로젝트명)
$ ls
README.md build.gradle gradle gradlew.bat run-b src
build core-util gradlew run-a settings.gradle
2. [젠킨스 서버] 받아온 소스를 gradle 을 통해 빌드 하여 jar 파일로 만든다.
3~5. 빌드후 조취 (빌드한 소스 운영 서버에 옮기고 프로세스 재기동)
- post build task 는 빌드 완료후 실행 되는 부분으로 log text에 있는 로그가 있을 경우 아래 script 를 실행하도록 할 수 있다.
- 여러 조건을 추가하여 해당 로그중 하나라도 or 모두 있어야 script 부분을 실행 하도록 할 수도 있다.
- script 단에 적혀지는 부분은 만든 프로젝트 루트 경로 부터 시작한다. (해당 경로에는 깃에서 받은 소스가 있다)
:: 시작 경로 : /Users/hongyoolee/.jenkins/workspace/Multi-Module
6. 자동화 시작
- bulid history 아래 로딩바 클릭시 로그 확인이 가능하다
7. 확인
- 프로세스 확인
$ ps -ef | grep 'MULTI_MODULE_RUN_A\|MULTI_MODULE_RUN_B' | grep -v grep
501 32099 1 0 12:54PM ?? 0:11.67 /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home/bin//java -jar /Users/hongyoolee/IdeaProjects/multi-module/run-a/build/libs/run-a-1.0.0-SNAPSHOT.jar -Dname MULTI_MODULE_RUN_A
501 32105 1 0 12:54PM ?? 0:11.14 /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home/bin//java -jar /Users/hongyoolee/IdeaProjects/multi-module/run-b/build/libs/run-b-1.0.0-SNAPSHOT.jar -Dname MULTI_MODULE_RUN_B
- 테스트
정상적으로 배포가 되었다!
배포후 테스트 하는 시간이 있으며, 매번 하는 테스트도 자동화 한다면 업무 효율이 높아지지 않을까?
NewMan 을 이용하여 테스트를 자동화 해보자!
* NewMan : postman 에서 만든 테스트 케이스를 CLI 상에서 실행 시킬수 있도록 하는 서비스
다음 포스팅에서 다루겠습니다 ㅎㅎ
그럼 이만!
'ETC' 카테고리의 다른 글
[mac] 사용중인 포트의 PID 찾기 (0) | 2021.12.24 |
---|---|
[스프링부트] The temporary upload location [**/tmp/tomcat.*/work/Tomcat/localhost/ROOT]** is not valid (0) | 2021.09.27 |
[로그인] 로그인 유지는 어떻게 처리 하는 걸까? (0) | 2021.05.01 |
[Jenkins] 젠킨스 배포 자동화 (with. newman) (0) | 2021.04.18 |
[Jenkins] 젠킨스 Mac 으로 설치 (0) | 2021.04.17 |