Skip to content

refactor : 워크플로우 리펙터링 #4

refactor : 워크플로우 리펙터링

refactor : 워크플로우 리펙터링 #4

Workflow file for this run

name: Deploy Frontend to Dev
on:
workflow_dispatch:
push:
branches:
- feature/frontcicd
pull_request:
branches:
- feature/frontcicd
types:
- closed
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 리포지토리의 코드를 체크아웃합니다.
- name: Checkout code
uses: actions/checkout@v3
# Node.js를 설정합니다.
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '20.16.0'
# 의존성을 설치합니다.
- name: Install dependencies
run: npm install
working-directory: ./frontend
# React 애플리케이션을 빌드합니다.
- name: Build React app
run: CI=false npm run build
working-directory: ./frontend
# Docker 이미지를 빌드합니다.
- name: Build Frontend Docker image
run: docker build -t frontend-app -f Dockerfile .
# Amazon ECR에 로그인합니다.
- name: Log in to Amazon ECR
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: |
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com
# Docker 이미지를 태그하고 푸시합니다.
- name: Tag and Push Frontend Docker image
id: frontend_tag_image
run: |
TIMESTAMP=$(date +%Y%m%d%H%M%S)
FRONTEND_IMAGE_TAG=${{ github.sha }}-frontend-$TIMESTAMP
docker tag frontend-app:latest ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/itsmine-repository:$FRONTEND_IMAGE_TAG
echo "FRONTEND_IMAGE_TAG=$FRONTEND_IMAGE_TAG" >> $GITHUB_ENV
docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/itsmine-repository:$FRONTEND_IMAGE_TAG
# Amazon EC2 인스턴스에 SSH로 접속하여 Docker 컨테이너를 배포합니다.
- name: SSH into EC2 and deploy Frontend Docker container
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ec2-user
key: ${{ secrets.SSH_KEY }}
port: 22
script_stop: true
script: |
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com
docker pull ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/itsmine-repository:${{ env.FRONTEND_IMAGE_TAG }}
docker stop frontend-app || true
docker rm frontend-app || true
docker run -d --name frontend-app -p 3000:80 ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/itsmine-repository:${{ env.FRONTEND_IMAGE_TAG }}