on
Jenkins + SpringBoot + AWS EC2 배포 (3)
Jenkins + SpringBoot + AWS EC2 배포 (3)
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
from http://ywook.tistory.com/37 by ccl(A) rewrite - 2021-11-30 19:01:36