TY blog

Jenkins CI/CD Spring boot 배포 자동화 - CD 구축하기 본문

DevOps

Jenkins CI/CD Spring boot 배포 자동화 - CD 구축하기

주짓수하는 개발자 2024. 5. 9. 12:09

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를 이용해서 배포한 개인 웹 사이트입니다. 

Comments