4.2.2 Docker 기반 백엔드 CI/CD 구축하기 (CodeDeploy, S3)

윤희빈·2026년 8월 28일

AWS CI/CD 구축

목록 보기
24/25

저번에 실습한 내용 마무리하기

1. 서버 종료

lsof -i:8080
sudo fuser -k -n tcp 8080
lsof -i:8080

또는

lsof -i:8080
kill [pid]
lsof -i:8080

2. 프로젝트 폴더 삭제

rm -rf [프로젝트 디렉터리명]


CI/CD 적용하기

1. Github Actions 코드 수정하기

.github/workflows/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: 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: ECR에 로그인하기
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v2
      - name: Docker 이미지 생성
        run: docker build -t cicd-ex .

      - name: Docker 이미지에 Tag 붙이기
        run: docker tag cicd-ex ${{ steps.login-ecr.outputs.registry }}/cicd-ex:latest

      - name: ECR에 Docker 이미지 Push하기
        run: docker push ${{ steps.login-ecr.outputs.registry }}/cicd-ex:latest

      - name: 압축하기
        run: tar -czvf $GITHUB_SHA.tar.gz appspec.yml scripts

      - name: S3에 프로젝트 폴더 업로드하기
        run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.tar.gz s3://cicd-ex/$GITHUB_SHA.tar.gz

      - name: Code Deploy를 활용해 EC2에 프로젝트 코드 배포
        run: aws deploy create-deployment
          --application-name cicd-ex
          --deployment-config-name CodeDeployDefault.AllAtOnce
          --deployment-group-name Production
          --s3-location bucket=cicd-ex,bundleType=tgz,key=$GITHUB_SHA.tar.gz

2. appspec.yml, 스크립트 파일 수정하기

appspec.yml → 이전 작성했던 코드 그대로 유지

version: 0.0
os: linux

files:
  # CodeDeploy가 S3로부터 가져온 파일 중 destination으로 이동시킬 대상을 지정한다.
  # / 이라고 지정하면 S3로부터 가져온 전체 파일을 뜻한다.
  - source: /
    # CodeDeploy가 S3로부터 가져온 파일을 EC2의 어떤 경로에 저장할 지 지정한다.
    destination: /home/ubuntu/cicd-ex

permissions:
  - object: /
    owner: ubuntu
    group: ubuntu

hooks:
  ApplicationStart:
    - location: scripts/start-server.sh
      timeout: 60
      runas: ubuntu

scripts/start-server.sh

#!/bin/bash

echo "--------------- 서버 배포 시작 -----------------"
docker stop cicd-ex || true
docker rm cicd-ex || true
docker pull {ECR Repository 주소}/cicd-ex:latest
docker run -d --name cicd-ex -p 8080:8080 {ECR Repository 주소}/cicd-ex:latest
echo "--------------- 서버 배포 끝 -----------------"

이때, {ECR Repository 주소}는 AWS에서 복사해온다.

3. push



profile
비니비니히비니의 정리블로그

0개의 댓글