update : 워크플로우, 도커 프론트 설정 #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |