6. CodeDeploy AppSpec 파일 설정 - hoho4190/aws-ec2-cicd-with-github-actions GitHub Wiki
CodeDeploy에 고유한 애플리케이션 AppSpec 파일은 YAML 형식 또는 JSON 형식 파일
AppSpec 파일은 파일에 정의된 일련의 수명 주기 이벤트 후크로 각 배포를 관리하는 데 사용
6.1. GitHub 저장소 구조
GitHub 저장소 루트
ㄴscripts
ㄴcodedeploy
ㄴAfterInstall.sh
ㄴApplicationStart.sh
ㄴApplicationStop.sh
ㄴappspec.yml
AppSpec 파일 작성
6.2.appspec.yml
version: 0.0
os: linux
# sources: GitHub 저장소 기준 배포할 소스 경로
# 소스 전체를 배포하려면 '/', build만 배포하려면 '/build'
# 각자 원하는 폴더나 파일 설정
# destination: 배포받을 EC2 인스턴스 경로
files:
- source: /
destination: /home/ec2-user/workspace/aws-cicd
file_exists_behavior: OVERWRITE
# files 섹션의 파일 및 폴더가 인스턴스에 복사된 후 권한 적용
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
# ApplicationStop: 애플리케이션을 안전하게 종료하거나 배포 준비 중에 현재 설치된 패키지를 제거하도록 스크립트를 지정할 수 있음
# AppSpec 파일은 인스턴스에 배포하기 전에는 인스턴스에 존재하지 않기 때문에,
# 인스턴스에 처음으로 배포할 때는 이 후크가 실행되지 않고 두 번째로 배포할 때부터 후크 실행 가능
# AfterInstall: 애플리케이션 구성 또는 파일 권한 변경과 같은 작업에 이 배포 수명 주기 이벤트를 사용할 수 있음
# ApplicationStart: 중지된 서비스를 다시 시작하려면 일반적으로 이 배포 수명 주기 이벤트를 사용
# timeout: 선택 사항. 스크립트가 실패로 간주되기 전에 실행할 수 있는 기간(초). 기본값은 3600초(1시간)
# runas: 선택 사항. 스크립트 실행 시 가장하는 사용자.
hooks:
ApplicationStop:
- location: scripts/codedeploy/ApplicationStop.sh
timeout: 360
runas: ec2-user
AfterInstall:
- location: scripts/codedeploy/AfterInstall.sh
timeout: 360
runas: ec2-user
ApplicationStart:
- location: scripts/codedeploy/ApplicationStart.sh
timeout: 360
runas: ec2-user
6.3. hook script
6.3.1. ApplicationStop shell script
aws-cicd 서비스 재시작
ApplicationStop.sh
# !/bin/bash
SERVICE_NAME=aws-cicd
sudo systemctl stop $SERVICE_NAME
6.3.2. AfterInstall shell script
plain jar 파일을 제외하고 최신 버전의 jar 파일을 aws-cicd.jar로 복제
AfterInstall.sh
# !/bin/bash
JAR_PATH=/home/ec2-user/workspace/aws-cicd/build/libs
SERVICE_JAR_NAME=aws-cicd.jar
latest_jar=$(ls -I *-plain.jar $JAR_PATH | sort -V | tail -n 1)
cp $JAR_PATH/$latest_jar $JAR_PATH/$SERVICE_JAR_NAME
6.3.3. ApplicationStart shell script
aws-cicd 서비스 재시작
ApplicationStart.sh
# !/bin/bash
SERVICE_NAME=aws-cicd
sudo systemctl start $SERVICE_NAME