Skip to content

update : 워크플로우, 도커 프론트 설정 #1

update : 워크플로우, 도커 프론트 설정

update : 워크플로우, 도커 프론트 설정 #1

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: npm run build
working-directory: ./frontend
# Docker 이미지를 빌드합니다.
- name: Build Frontend Docker image
run: docker build -t frontend-app -f Dockerfile.frontend .
# 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/frontend-repository:$FRONTEND_IMAGE_TAG
echo "::set-output name=FRONTEND_IMAGE_TAG::$FRONTEND_IMAGE_TAG"
docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/frontend-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/frontend-repository:${{ steps.frontend_tag_image.outputs.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/frontend-repository:${{ steps.frontend_tag_image.outputs.FRONTEND_IMAGE_TAG }}