Git에 Push 이벤트 발생시 자동으로 Jenkins 빌드까지 했으니 이번 포스팅에서는 Jenkins에서 EC2 서버 자동배포까지 해보겠습니다.

 

1. Jenkins SSH 설치

 

EC2 서버 배포를 위해 Jenkins 관리 -> 플러그인 관리에서 Publish Over SSH를 설치합니다.

 

 

2. SSH 연결 서버 정보 입력

 

Name Job에서 표시할 이름
Hostname 서버 IP
Username SSH 접근 계정 이름
Remote Directory 업로드될 디렉토리

 

Jenkins 관리 -> 시스템 설정에서 배포할 서버 정보를 입력해 줍니다.

정보를 모두 입력했다면 Use password authentication, or use a different key 를 체크해줍니다.

그리고 고급을 눌러서 EC2를 생성할 때 받은 pem 키를 열어서 해당 값을 Key 부분에 전부 넣어줍니다. 

 

 

마지막으로 Test Configuration을 눌러서 Success 가 나오는 것을 확인하고 저장합니다.

 

만약 Success가 나오지 않는다면 위에 입력한 정보가 맞는지, 배포할 EC2 서버에 SSH(22) 포트가 열려있는지 확인해야합니다.

2. Build 스크립트 작성 


Jenkins 프로젝트 -> 구성에 들어가서 빌드 스크립트를 작성해줍니다.

 

저는 배포 후 수행할 스크립트를 프로젝트에서 관리하도록 했기 때문에 deploy 폴더를 생성해 jar, 스크립트 파일을 SSH로 전송하도록 작성했습니다.

 

 

Sources files 배포할 폴더의 위치
Remove prefix 배포할 파일만 전송할 수 있도록 prefix는 제외하는 역할을 합니다.
A/B/*를 배포할 때 B/*만 배포하고 싶다면 A/를 넣어주면 됩니다.
Remote directory 업로드될 경로
Exec command 전송이 끝난 후 실행할 명령어

 

 

3. 배포 후 실행할 스크립트 작성

 

위에 언급한 것처럼 프로젝트에서 scripts 폴더 생성 및 delpoy.sh 이라는 스크립트를 작성했습니다.

#!/bin/bash

REPOSITORY=/home/ubuntu/test
PROJECT_NAME=jenkins-springboot

echo ">>> Build 파일 복사"

cp $REPOSITORY/deploy/*.jar $REPOSITORY/

echo ">>> 현재 구동중인 애플리케이션 pid 확인"

CURRENT_PID=$(pgrep -fl jenkins-springboot | grep java | awk '{print $1}')

echo ">> PID : " $CURRENT_PID

if [ -z "$CURRENT_PID" ]; then
  echo "구동중인 애플리케이션 없음."
else
  echo ">>> kill -15 $CURRENT_PID"
  kill -15 $CURRENT_PID
  sleep 10
fi

echo ">>> 애플리케이션 배포"

JAR_NAME=$(ls -tr $REPOSITORY/*.jar | tail -n 1)

echo ">>> JAR NAME : $JAR_NAME"

chmod +x $JAR_NAME

echo ">>> $JAR_NAME 실행"

nohup java -jar \
    -Dspring.config.location=classpath:/application.properties \
    $JAR_NAME > $REPOSITORY/nohup.out 2>&1 &

 

배포가 완료되면 자동으로 deploy.sh 이 실행되어 스프링부트가 실행되는 것을 확인할 수 있습니다.

 

참고 :

https://wellbell.tistory.com/9?category=976634 

 

6. 깃허브 연동된 젠킨스를 통해 AWS EC2 서버에 deploy하기

깃허브와 연동 이전에 포트포워딩을 통해서 가상머신위 우분투에 접근할수있도록 설정해야한다. 포트포워딩에 대한 내용은 다루지 않고 참조한 주소만 첨부하겠습니다. 참고로 아래 글의 포워

wellbell.tistory.com

 

'CI CD' 카테고리의 다른 글

Jenkins + SpringBoot + AWS EC2 배포 (2)  (0) 2021.11.28
Jenkins + SpringBoot + AWS EC2 배포 (1)  (0) 2021.10.28
어플리케이션 배포 전략  (0) 2021.10.23

+ Recent posts