Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- .ppk
- 자바 swing 프로젝트
- ..gitignore
- submit 기본동작
- dbeaver 백업/복구
- CI/CD
- document 함수
- 테스팅
- Quartz dependency
- deploy.sh
- 깃허브 토큰 발급
- git 폴더 모으기
- 깃허브 연동
- EL1021E
- 소프트웨어
- css 리셋
- 배포 자동화
- Jenkins
- 환경변수
- 깃허브 토큰 생성
- 타임리프 참조 오류
- 클래스 참조
- firstChild
- 채팅 프로젝트
- Quartz 라이브러리
- 배열 call by value
- AWS 생성
- reset
- 되돌리기
- Node Property
Archives
- Today
- Total
TY blog
Spring boot 배포 스크립트 작성 본문
Bash는 Unix 계열 운영체제에서 사용되는 명령 줄 인터페이스를 위한 쉘(shell)로 스크립팅 언어로 분류되어 컴파일 없이 바로 해석되어 실행되는데 이것을 응용해서 배포 스크립트 파일을 만들 수 있다.
Spring Boot Gradle 기반 인스턴스 배포 Flow
전체 흐름으로는 프로젝트 패키지에서
실행파일을 생성(Build)하고 파일을 실행(배포) 하는 작업
1. Gradle Build에 필요한 파일 설명
1. gradle-wrapper.jar : wrapper 파일이며 실행 스크립트의 동작을 도와준다.
- 파일위치 : gradle/wrapper/
- 설정파일 : gradle-wrapper.properties
2. gradlew : 유닉스용 wrapper 실행 스크립트
- 컴파일, 빌드 등을 하는 경우 사용
- * 빌드 : 소스코드를 컴파일, 테스트, 정적 분석 등을 실행하여 실행 가능한 애플리케이션으로 만들어주는 과정
1. build/libs 폴더에 애플리케이션 실행 jar 파일 생성 명령어
gradlew clean build
* clean : 이전 빌드에서 생성된 모든 빌드 아티팩트를 정리
* build : 프로젝트 빌드
2. 생성된 jar 파일 실행
# 먼저 선행작업으로 Java가 설치되어 있어야 한다.
1. 애플리케이션 실행시키기(리눅스 창 종료시 애플리케이션도 종료된다.)
java -jar #{애플리케이션 jar파일}
2. 애플리케이션 백그라운드에서 실행시키기
nohup java -jar #{애플리케이션 jar파일} &
위에 작업을 한 번에 진행할 배포 스크립트 파일 작성
* 선행작업으로 Github 원격 저장소에 프로젝트가 연결되고 Java가 설치되어 있어야 한다.
# 1. 이 스크립트 파일은 Bash 셸에서 해석되어야 하는 것을 지정
#!/bin/bash
# 2. 자주사용하는 지역변수 정의
REPOSITORY=/home/ubuntu
PROJECT_NAME=springProfile_v2
# 3. 프로젝트 폴더로 이동
cd $REPOSITORY/$PROJECT_NAME
# 4. 스크립트가 정상 실행되는지 확인하는 출력문
echo "> Git pull"
# 5. github에 변경된 파일 가져오기
git pull
echo "> 프로젝트Build 시작"
# 6. Jar 파일을 생성해 주는 Build 진행
./gradlew build
echo "> 현재 구동중인 애플리케이션 pid 확인"
# 7. 현재 실행중인 Application 프로세스 ID 확인 (ID값 리턴)
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "> 현재 구동중인 애플리케이션 pid : $CURRENT_PID"
# 8. ID값 유무 확인하는 IF ELSE 문
if [ -z "$CURRENT_PID"]; then
echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
# 9. 실행되고 있는 애플리케이션이 있으면 종료(kill)
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
# 10. 종료시 실행되는 시간 약 5초 대기
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$PROJECT_NAME-0.0.1-SNAPSHOT.jar
echo "> JAR Name : $JAR_NAME"
# 11. 실행 애플리케이션은 백그라운드 환경에서 실행되게 설정, 오류나 다른 출력은 버리기
nohup java -jar $REPOSITORY/$PROJECT_NAME/build/libs/$JAR_NAME > /dev/null 2>&1 &
* 참고서적 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
'DevOps' 카테고리의 다른 글
Failed to stop bean 'webServerStartStop' Error 해결 (0) | 2024.05.13 |
---|---|
Jenkins CI/CD Spring boot 배포 자동화 - CD 구축하기 (0) | 2024.05.09 |
Jenkins CI/CD Spring boot 배포 자동화 - CI 구축하기 (0) | 2024.05.08 |
Comments