Jenkins에서 GitHub으로부터 소스코드를 받아 테스트, 빌드까지 마친 과정 이후 과정부터 작성하겠다.
간단하게 컨트롤러 하나 생성한다.
저장된 빌드 파일을 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 실행
#!/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 &
appspec.yml, shell scripts 들과 함께 번들링된 파일이 업로드 될 S3 버킷 생성
S3 Bucket 설치 설명 링크
권한 설정하기
Jenkins에서 CodeDeploy로 hook 하기 위해 별도의 Plugin을 설치하자.
Jenkins 아이템 설정 > [빌드 후 조치] > [Deploy an application to AWS CodeDeploy] 추가
Payload URL에 http://[ip]:[port]/github-webhook/ 을 입력한다. (마지막 / 입력하기!)
자동 빌드/배포 설정이 끝났다.
빌드 테스트를 해보자
CodeDeploy 성공
appspec.yml에서 설정한 배포위치 확인할 수 있다.
ls 명령어를 통해 CodeDeploy 설정에서 입력한 Include Files를 확인할 수 있다.