일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 타임리프 참조 오류
- 배열 call by value
- ..gitignore
- Jenkins
- git 폴더 모으기
- .ppk
- vue 추가
- 소프트웨어
- deploy.sh
- CI/CD
- 테스팅
- document 함수
- AWS 생성
- 클래스 참조
- EL1021E
- 자바 swing 프로젝트
- 되돌리기
- 깃허브 토큰 생성
- Quartz dependency
- vue 실행
- reset
- 깃허브 토큰 발급
- Node Property
- Quartz 라이브러리
- firstChild
- 환경변수
- submit 기본동작
- dbeaver 백업/복구
- 배포 자동화
- 채팅 프로젝트
- Today
- Total
TY blog
Jenkins CI/CD Spring boot 배포 자동화 - CD 구축하기 본문
CI에 이어서 CD 구축까지 진행하겠습니다.
이전 글 보기
https://sunhistory.tistory.com/90
Jenkins CI/CD Spring boot 배포 자동화 - CI 구축하기
CI/CD 란?1. 지속적 통합(Continuous Integration, CI)여러 명의 개발자가 작성한 코드를 정기적으로 통합CI 시스템은 코드를 커밋할 때마다 자동으로 빌드 및 테스트를 수행하여 코드 베이스에 문제가 있
sunhistory.tistory.com
1. SSH 통신 플러그인 설치
배포할 인스턴스 서버 EC2와 Jenkins 서버는 SSH 통신으로
jar 파일을 전달해 SSH 플러그인을 설치합니다.

Jenkins 페이지에 들어가서
Jenkins 관리 > Plugins을 클릭

Publish Over SSH 클릭 후 플러그인을 다운로드 후
Jenkins 서버에 접속하여 재부팅을 진행합니다.
service jenkins restart
2. SSH 설정
위에 이미지에서
Jenkins 관리 > System 을 클릭합니다.

밑에 Publish over SSH 에 Key 부분은
EC2 서버에서 SSH 통신할 때 사용한 .pem 키파일을 적어줍니다.
. pem 파일의 내용은 메모장으로 열면 내용이 보입니다.

바로 밑에 SSH Server 부분에
Name -> 자유롭게 작성
Hostname -> 배포할 서버의 IP
Username -> 배포할 EC2에서 사용하고 있는 계정 이름
Remote Directory -> 배포할 서버의 jar 파일이 이동될 경로를 입력합니다.
* Hostname 에서 Jenkins 서버와 배포할 서버가 같은 인스턴스에 있다면
내부 IP를 입력합니다.
다른 곳에 있으면 보안규칙 인바운드 규칙을 추가해야 정상적으로 연결됩니다.
1. Linux 환경 ip 확인 명령어
ifconfig

하단에 Test Configuration을 클릭해 SSH 테스트를 진행합니다.
우측에 Success가 나오면 성공
3. 파일, 명령어 전달

이전글에서 만든 Project로 이동 후 구성 버튼을 클릭합니다.

Send files or execute commands over SSH
Transfer 설정을 이미지를 참고해서 입력합니다.
Exec command 부분은 파일이 완전히 서버로 옮겨진 후
작성한 명령어를 실행하는 기능입니다.
* 배포 스크립트 deploy.sh
https://sunhistory.tistory.com/89
Spring boot 배포 스크립트 작성
Bash는 Unix 계열 운영체제에서 사용되는 명령 줄 인터페이스를 위한 쉘(shell)로 스크립팅 언어로 분류되어 컴파일 없이 바로 해석되어 실행되는데 이것을 응용해서 배포 스크립트 파일을 만들 수
sunhistory.tistory.com
배포 스크립트를 작성한 적이 있었지만
위에서 작성한 배포 스크립트는 깃 pull > 빌드 > 파일 실행까지 모두 작성했지만,
jenkins를 이용해 CI/CD 작성을 진행해
배포 스크립트는 전달받은 jar 파일을 실행하는 로직만 작성합니다.
# deploy.sh
REPOSITORY=/home/ubuntu
PROJECT_NAME=springProfile_v2
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
echo "> 현재 구동중인 애플리케이션 pid : $CURRENT_PID"
if [ -z "$CURRENT_PID"]; then
echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$PROJECT_NAME-0.0.1-SNAPSHOT.jar
echo "> JAR Name : $JAR_NAME"
nohup java -jar jar/$JAR_NAME > /dev/null 2>&1 &
Github에 커밋 시 배포가 자동으로 실행되면 완료입니다.
http://ec2-3-39-143-248.ap-northeast-2.compute.amazonaws.com:9999/
임태양 웹 프로필
ec2-3-39-143-248.ap-northeast-2.compute.amazonaws.com:9999
실제 Jenkins를 이용해서 배포한 개인 웹 사이트입니다.
'DevOps' 카테고리의 다른 글
Failed to stop bean 'webServerStartStop' Error 해결 (0) | 2024.05.13 |
---|---|
Jenkins CI/CD Spring boot 배포 자동화 - CI 구축하기 (0) | 2024.05.08 |
Spring boot 배포 스크립트 작성 (0) | 2024.05.08 |