1. appspec.yml 스크립트 파일 작성하기
appspec.yml은 CodeDeploy가 실행될 때 필수적으로 존재해야 하는 파일이다. CodeDeploy는 이 설정 파일을 기반으로 실행함.
appspec.yml
version: 0.0
os: linux
files:
# S3에 저장한 파일들 중 destination(AWS EC2)으로 이동시킬 대상을 지정한다.
# / 이라고 지정하면 S3에 저장한 전체 파일을 뜻한다.
- source: /
# EC2의 어떤 경로에 저장할 지 지정한다.
destination: /home/ubuntu/instagram-server
permissions:
- object: /
owner: ubuntu
group: ubuntu
hooks:
ApplicationStart:
- location: scripts/start-server.sh
timeout: 60
runas: ubuntu
- permissions: 파일 및 디렉토리의 소유자와 그룹을 지정합니다.
- object: 권한을 설정할 파일 또는 디렉토리의 경로를 지정. /는 모든 파일을 의미.
- owner: 파일의 소유자를 지정. 여기서는 ubuntu로 설정되어 있.
- group: 파일의 그룹을 지정. 여기서는 ubuntu로 설정
- hooks: 배포 과정 중 특정 시점에 실행할 스크립트를 지정
- ApplicationStart: 애플리케이션 시작 시 실행할 스크립트를 지정함.
- location: 실행할 스크립트의 경로를 지정합니다. 여기서는 scripts/start-server.sh로 설정되어 있음.
- timeout: 스크립트 실행의 타임아웃 시간을 초 단위로 지정합니다. 여기서는 60초로 설정되어 있음.
- runas: 스크립트를 실행할 사용자를 지정합니다. 여기서는 ubuntu로 설정되어 있음.
- ApplicationStart: 애플리케이션 시작 시 실행할 스크립트를 지정함.
scripts/start-server.sh
#!/bin/bash
echo "--------------- 서버 배포 시작 -----------------"
cd /home/ubuntu/instagram-server
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar > ./output.log 2>&1 &
echo "--------------- 서버 배포 끝 -----------------"
2. Github Actions 코드 작성
.github/sorkflows/deploy.yml
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
- name: JDK 17버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: application.yml 파일 만들기
run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml
- name: 테스트 및 빌드하기
run: ./gradlew clean build
- name: 빌드된 파일 이름 변경하기
run: mv ./build/libs/*SNAPSHOT.jar ./project.jar
- name: 압축하기
run: tar -czvf $GITHUB_SHA.tar.gz project.jar appspec.yml scripts
- name: AWS Resource에 접근할 수 있게 AWS credentials 설정
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ap-northeast-2
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: S3에 프로젝트 폴더 업로드하기
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.tar.gz s3://instagram-server/$GITHUB_SHA.tar.gz
- name: Code Deploy를 활용해 EC2에 프로젝트 코드 배포
run: aws deploy create-deployment
--application-name instagram-server
--deployment-config-name CodeDeployDefault.AllAtOnce
--deployment-group-name Production
--s3-location bucket=instagram-server,bundleType=tgz,key=$GITHUB_SHA.tar.gz
- $GITHUB_SHA: Github Actions에서 사용되는 기본 환경 변수 중 하나로, 현재 실행 중인 워크플로우의 커밋 SHA(해시)를 나타냄.
- name: AWS Resource에 접근할 수 있게 AWS credentials 설정
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ap-northeast-2
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- 설명: AWS 리소스에 접근할 수 있도록 AWS 자격 증명을 설정합니다.
- 사용: aws-actions/configure-aws-credentials 액션을 사용하여 AWS 자격 증명을 설정합니다.
- 매개변수:
- aws-region: AWS 리전(여기서는 ap-northeast-2).
- aws-access-key-id: GitHub Secrets에 저장된 AWS 액세스 키 ID.
- aws-secret-access-key: GitHub Secrets에 저장된 AWS 시크릿 액세스 키.
- name: S3에 프로젝트 폴더 업로드하기
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.tar.gz s3://instagram-server/$GITHUB_SHA.tar.gz
- 설명: 프로젝트 폴더를 S3 버킷에 업로드합니다.
- 명령어: aws s3 cp 명령어를 사용하여 현재 커밋의 SHA 값을 포함한 tar.gz 파일을 S3 버킷(instagram-server)에 업로드합니다.
- 매개변수:
- --region: AWS 리전(여기서는 ap-northeast-2).
- ./$GITHUB_SHA.tar.gz: 업로드할 파일 경로.
- s3://instagram-server/$GITHUB_SHA.tar.gz: S3 버킷의 대상 경로.
- name: Code Deploy를 활용해 EC2에 프로젝트 코드 배포
run: aws deploy create-deployment
--application-name instagram-server
--deployment-config-name CodeDeployDefault.AllAtOnce
--deployment-group-name Production
--s3-location bucket=instagram-server,bundleType=tgz,key=$GITHUB_SHA.tar.gz
- 설명: AWS CodeDeploy를 사용하여 EC2 인스턴스에 프로젝트 코드를 배포합니다.
- 명령어: aws deploy create-deployment 명령어를 사용하여 배포를 생성합니다.
- 매개변수:
- --application-name: CodeDeploy 애플리케이션 이름(여기서는 instagram-server).
- --deployment-config-name: 배포 구성 이름(여기서는 CodeDeployDefault.AllAtOnce).
- --deployment-group-name: 배포 그룹 이름(여기서는 Production).
- --s3-location: S3 버킷 위치 정보(버킷 이름, 번들 타입, 키).
3. CodeDeploy가 잘 실행됐는 지 확인
아래 경로로 들어가면 CodeDeploy가 실행시킨 스크립트 로그 파일을 열 수 있다.
/opt/codedeploy-agent/deployment-root/{deployment-group-ID}/{deployment-ID}/logs/scripts.log
'기타' 카테고리의 다른 글
티베로 java.lang.AbstractMethodError (0) | 2025.02.26 |
---|---|
[오류] 배포 중 로DB 접근 관련 오류 (0) | 2024.09.11 |
[CI/CD] 확장성을 고려한 CI/CD 구축 방법 1 - 정보와 CodeDeply 셋팅 / IAM 설정 실습 (0) | 2024.08.04 |
[CI/CD] 일반 프로젝트에서 많이 쓰는 CI/CD 구축 방법 (0) | 2024.08.04 |
[CI/CD] 개인 프로젝트에서 많이 쓰는 CI/CD 구축 방법 (0) | 2024.07.29 |