Skip to content

refactor: fixed CICD setup #3

refactor: fixed CICD setup

refactor: fixed CICD setup #3

Workflow file for this run

name: Deploy To EC2
on:
push:
branches:
- "feat/#49-cicd-setup"
jobs:
Deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
- name: JDK 21버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
- name: application.yml (통합본) 파일 생성
run: |
mkdir -p ./src/main/resources
# 통합된 yml 하나만 생성합니다. local.yml 생성 단계는 삭제했습니다.
echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml
- name: 빌드하기 (테스트 제외)
# RDS 보안 그룹 설정 등에 따라 빌드 중 DB 접속 테스트가 실패할 수 있으므로
# 안정적인 배포를 위해 -x test를 권장합니다.
run: |
chmod +x ./gradlew
./gradlew clean build -x test
- name: 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 이미지 생성 및 Push
run: |
docker build -t remu-server .
docker tag remu-server ${{ steps.login-ecr.outputs.registry }}/remu-server:latest
docker push ${{ steps.login-ecr.outputs.registry }}/remu-server:latest
- name: SSH로 EC2에 접속 및 배포 실행
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script_stop: true
# [핵심] SSH 환경으로 GitHub Secrets 변수들을 넘겨줍니다.
envs: ECR_REGISTRY,DB_URL,DB_USER,DB_PW,GEMINI_API_KEY,GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,KAKAO_CLIENT_ID,KAKAO_CLIENT_SECRET,JWT_SECRET,BASE_URL,GOOGLE_API_KEY
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
DB_URL: ${{ secrets.DB_URL }}
DB_USER: ${{ secrets.DB_USER }}
DB_PW: ${{ secrets.DB_PW }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
KAKAO_CLIENT_ID: ${{ secrets.KAKAO_CLIENT_ID }}
KAKAO_CLIENT_SECRET: ${{ secrets.KAKAO_CLIENT_SECRET }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
BASE_URL: ${{ secrets.BASE_URL }}
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
script: |
# EC2 내 도커가 ECR에서 이미지를 당겨올 수 있도록 로그인
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin $ECR_REGISTRY
# 기존 컨테이너 정리
docker stop remu-server || true
docker rm remu-server || true
# 새 이미지 pull
docker pull $ECR_REGISTRY/remu-server:latest
# [핵심] RDS 및 환경변수 주입하며 실행
docker run -d --name remu-server -p 8080:8080 \
-e DB_URL=$DB_URL \
-e DB_USER=$DB_USER \
-e DB_PW=$DB_PW \
-e GEMINI_API_KEY=$GEMINI_API_KEY \
-e GOOGLE_CLIENT_ID=$GOOGLE_CLIENT_ID \
-e GOOGLE_CLIENT_SECRET=$GOOGLE_CLIENT_SECRET \
-e KAKAO_CLIENT_ID=$KAKAO_CLIENT_ID \
-e KAKAO_CLIENT_SECRET=$KAKAO_CLIENT_SECRET \
-e JWT_SECRET=$JWT_SECRET \
-e BASE_URL=$BASE_URL \
-e GOOGLE_API_KEY=$GOOGLE_API_KEY \
$ECR_REGISTRY/remu-server:latest