Skip to content

fix: 빌드 이슈 해결 #40

fix: 빌드 이슈 해결

fix: 빌드 이슈 해결 #40

Workflow file for this run

name: Dockerizing to Amazon ECR # 워크플로우의 이름을 'Dockerizing to Amazon ECR'로 설정합니다.
on:
# push: # 특정 브랜치에 코드가 푸시될 때 워크플로우가 트리거됩니다.
# branches: ['main'] # 'main' 브랜치에 푸시될 때만 워크플로우 실행
pull_request: # 풀 리퀘스트가 열리거나 업데이트될 때 트리거됩니다.
branches: ['main'] # 'main' 브랜치에 대한 풀 리퀘스트일 때만 실행
env: # 공통 환경 변수를 설정합니다.
AWS_REGION: ap-northeast-2 # AWS 리전을 서울 리전으로 설정
ECR_REPOSITORY: sj-graduate # ECR 저장소 이름을 'sj-graduate'로 설정
ECR_REGISTRY: 214925768882.dkr.ecr.ap-northeast-2.amazonaws.com # ECR 레지스트리 URL을 설정
jobs: # 실행할 작업을 정의합니다.
ci: # 'deploy'라는 작업을 정의합니다.
name: Deploy # 작업의 이름을 'Deploy'로 설정
runs-on: ubuntu-latest # 최신 Ubuntu 버전에서 실행되도록 설정
# environment: production # 이 작업이 'production' 환경에서 실행됨을 정의
steps: # 이 작업에서 실행될 단계들을 정의합니다.
- name: Checkout # 소스 코드를 체크아웃하는 단계
uses: actions/checkout@v3 # GitHub 제공 체크아웃 액션 사용
- name: Config AWS credentials # AWS 자격 증명을 구성하는 단계
uses: aws-actions/configure-aws-credentials@v2 # AWS 자격 증명 구성 액션 사용
with:
aws-access-key-id: ${{ secrets.AWS_IAM_ACCESS }} # GitHub Secrets에 저장된 AWS 액세스 키 ID 사용
aws-secret-access-key: ${{ secrets.AWS_IAM_SECRET }} # GitHub Secrets에 저장된 AWS 시크릿 액세스 키 사용
aws-region: ${{ env.AWS_REGION }} # 위에서 정의한 AWS 리전 사용
- name: Login To Amazon ECR # Amazon ECR에 로그인하는 단계
id: login-ecr # 이 단계의 ID를 'login-ecr'로 설정 (후속 단계에서 참조 가능)
uses: aws-actions/amazon-ecr-login@v1 # Amazon ECR 로그인 액션 사용
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ env.ECR_REGISTRY }}
IMAGE_TAG: ${{ github.sha }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG -f ./Dockerfile.prod ./
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV
- name: Save image tag to file
run: echo "${IMAGE_TAG}" > image-tag.txt
- name: Verify image tag file
run: cat image-tag.txt
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: image-tag
path: image-tag.txt
cd:
name: BE-Deploy Docker Image to Server
runs-on: [self-hosted, sj-graduate]
needs: ci
steps:
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: image-tag
- name: Read image tag
id: read-image-tag
run: |
IMAGE_TAG=$(cat image-tag.txt)
echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_IAM_ACCESS }}
aws-secret-access-key: ${{ secrets.AWS_IAM_SECRET }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Remove any existing .env.production file
run: rm -f .env.production
- name: Create .env file from secrets
run: |
echo JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }} >> .env
echo JWT_ACCESS_SECRET=${{ secrets.JWT_ACCESS_SECRET }} >> .env
echo JWT_REFRESH_SECRET=${{ secrets.JWT_REFRESH_SECRET }} >> .env
echo JWT_ACCESS_EXPIRE_TIME=15m >> .env
echo JWT_REFRESH_EXPIRE_TIME=7d >> .env
echo RT_JWT_EXPIRATION_TIME=604800 >> .env
# DATABASE
echo DB_PORT=5432 >> .env
echo DB_HOST=${{ secrets.DB_HOST }} >> .env
echo DB_USER=postgres >> .env
echo DB_PASSWORD=${{ secrets.DB_PASSWORD }} >> .env
echo DB_NAME=sjGraduate >> .env
# REDIS
echo REDIS_HOST=${{ secrets.REDIS_HOST }} >> .env
echo REDIS_PORT=6379 >> .env
echo REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }} >> .env
# GPT
echo FUNNY_MAN_ASSISTANT_ID=${{ secrets.FUNNY_MAN_ASSISTANT_ID }} >> .env
echo FEEDBACK_MAN_ASSISTANT_ID=${{ secrets.FEEDBACK_MAN_ASSISTANT_ID }} >> .env
echo KIND_MAN_ASSISTANT_ID=${{ secrets.KIND_MAN_ASSISTANT_ID }} >> .env
echo DEFAULT_MAN_ASSISTANT_ID=${{ secrets.DEFAULT_MAN_ASSISTANT_ID }} >> .env
echo ORGANIZATION_ID=${{ secrets.ORGANIZATION_ID }} >> .env
echo GPT_API_KEY=${{ secrets.GPT_API_KEY }} >> .env
# AWS
echo AWS_IAM_ACCESS=${{ secrets.AWS_IAM_ACCESS }} >> .env
echo AWS_IAM_SECRET=${{ secrets.AWS_IAM_SECRET }} >> .env
echo AWS_ECR_BE=${{ secrets.AWS_ECR_BE }} >> .env
- name: Set permissions for .env file
run: chmod 600 .env
- name: Verify .env file contents
run: cat .env
- name: Pull image from Amazon ECR and restart Docker Container
run: |
docker pull ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
docker stop sj-graduate || true && docker rm sj-graduate || true
docker run -d --name sj-graduate -p 8080:8080 --restart unless-stopped \
--env-file .env \
${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
# - name: 기존 EC2에 저장되어있는 이미지 삭제
# uses: appleboy/ssh-action@master
# with:
# host: ${{ secrets.EC2_IP }}
# username: ${{ secrets.EC2_USERNAME }}
# key: ${{ secrets.EC2_SSH_KEY }}
# script: |
# sudo docker images -q | xargs -r docker rmi