[Server] Jenkins, CodeDeploy로 SpringBoot 배포하기

애이용·2021년 5월 28일
3

DevOps

목록 보기
4/6

🛠 Architecture

CodeDeploy 설치 설명 링크

Jenkins에서 GitHub으로부터 소스코드를 받아 테스트, 빌드까지 마친 과정 이후 과정부터 작성하겠다.

간단한 스프링부트 프로젝트 생성


간단하게 컨트롤러 하나 생성한다.

appspec.yml

구체적인 작성 방법 링크

저장된 빌드 파일을 AWS CodeDeploy가 EC2에 자동 배포(CD)를 해준다.
CodeDeploy에서 배포를 위해서 appspec.yml을 만든다.
배포 생명주기에 따라, 파일을 특정 디렉토리로 옮기거나 Shell Script를 실행하도록 명령할 수 있다.
번들링한 파일 최상단에 위치해야 한다. (.gitignore과 같은 위치)

version: 0.0 # version 필수 값, 0.0이 고정
os: linux # ec2에 배포하는 경우 필수 값, amazon linux -> linux

files:
  - source:  /
    destination: /home/ec2-user/jenkins  # Artifact가 unzip된 결과가 생성될 디렉토리명, 배포할 위치
    overwrite: yes

hooks:
  ApplicationStart:
    - location: scripts/deploy.sh    # ApplicationStart 샘명 주기에서 deploy.sh 실행

deploy.sh

#!/bin/bash
BUILD_JAR=$(ls /home/ec2-user/jenkins/build/libs/*.jar)     # jar가 위치하는 곳
JAR_NAME=$(basename $BUILD_JAR)
echo "> build 파일명: $JAR_NAME" >> /home/ec2-user/deploy.log

echo "> build 파일 복사" >> /home/ec2-user/deploy.log
DEPLOY_PATH=/home/ec2-user/
cp $BUILD_JAR $DEPLOY_PATH

echo "> 현재 실행중인 애플리케이션 pid 확인" >> /home/ec2-user/deploy.log
CURRENT_PID=$(pgrep -f $JAR_NAME)

if [ -z $CURRENT_PID ]
then
  echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." >> /home/ec2-user/deploy.log
else
  echo "> kill -15 $CURRENT_PID"
  kill -15 $CURRENT_PID
  sleep 5
fi

DEPLOY_JAR=$DEPLOY_PATH$JAR_NAME
echo "> DEPLOY_JAR 배포"    >> /home/ec2-user/deploy.log
nohup java -jar $DEPLOY_JAR >> /home/ec2-user/deploy.log 2>/home/ec2-user/deploy_err.log &

S3 Bucket

appspec.yml, shell scripts 들과 함께 번들링된 파일이 업로드 될 S3 버킷 생성
S3 Bucket 설치 설명 링크

IAM 사용자 추가

권한 설정하기

CodeDeploy 설정

Code Deploy 플러그인 설치

Jenkins에서 CodeDeploy로 hook 하기 위해 별도의 Plugin을 설치하자.
Jenkins 아이템 설정 > [빌드 후 조치] > [Deploy an application to AWS CodeDeploy] 추가

  • CodeDeploy 애플리케이션 Name, Group, Region S3 Bucket name 설정
  • Include Files
    : 포함할 파일 지정
  • [Use Access/Secret keys] > AWS Access Key, AWS Secret Key
    : IAM 사용자에게 발급받은 액세스 키, 비밀 액세스 키 입력

깃허브 Web Hook 추가

Payload URL에 http://[ip]:[port]/github-webhook/ 을 입력한다. (마지막 / 입력하기!)

자동 빌드/배포 설정이 끝났다.

빌드 테스트를 해보자

CodeDeploy 성공

appspec.yml에서 설정한 배포위치 확인할 수 있다.
ls 명령어를 통해 CodeDeploy 설정에서 입력한 Include Files를 확인할 수 있다.

연습 레포지토리

profile
로그를 남기자 〰️

0개의 댓글