Skip to content

fix : RDS 경로 문제 해결 #32

fix : RDS 경로 문제 해결

fix : RDS 경로 문제 해결 #32

Workflow file for this run

name: Spring Push CI/CD (v 1.3)
env:
IMAGE_TAG: 1.0.0
on:
push:
branches:
- feat/ci-cd
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: 1. checkout repo
uses: actions/checkout@v2 # 깃허브 액션이 코드가져옴
- name: 2. run test
run: ./gradlew test
- name: 3. set up JDK 21
uses: actions/setup-java@v2
with:
java-version: 21
distribution: 'temurin'
- name: 3. grant execute permission for gradlew
run: chmod +x gradlew
- name: 4. run tests
run: #./gradlew test
build-and-push:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 # 깃허브 액션이 코드가져옴
- name: Docker Hub Login
uses: docker/login-action@v3
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_TOKEN}}
- name: Spring Image Build and Push
run: |
docker build --platform linux/amd64 \
-t ${{ secrets.DOCKER_USERNAME }}/not-me-be:1.0.0 \
--push .
deploy:
needs: build-and-push
runs-on: ubuntu-latest
steps:
# 1. SSH 초기 설정
- name: Set up SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
# 2. 깃허브 액션에서 env 생성
- name: Create .env file
run: |
echo "RDS_DNS=${{ secrets.RDS_DNS }}" >> .env
echo "MYSQL_DATABASE=${{ secrets.MYSQL_DATABASE }}" >> .env
echo "MYSQL_ROOT_PASSWORD=${{ secrets.MYSQL_ROOT_PASSWORD }}" >> .env
echo "IMAGE=${{ secrets.IMAGE }}" >> .env
# 3. 깃허브 액션에 AWS CLI 설치
- name: Install AWS CLI
uses: unfor19/install-aws-cli-action@v1
with:
version: 2
# 4. 깃허브 액션 CLI 환경변수 설정
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v3
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
# 5. BE1 인스턴스 퍼블릭 IP 반환
- name: Get BE1 Public IP
run: |
BE1_IP=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=Our-Universe-BE1" \
"Name=instance-state-name,Values=running" \
--query "Reservations[].Instances[].PublicIpAddress" \
--output text \
)
echo "BE1_IP=$BE1_IP" >> $GITHUB_ENV
echo "불러온 BE1 IP => $BE1_IP"
# 6. B2 IP 가져오기
- name: Get BE2 Public IP
run: |
BE2_IP=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=Our-Universe-BE2" \
"Name=instance-state-name,Values=running" \
--query "Reservations[].Instances[].PublicIpAddress" \
--output text \
)
echo "BE2_IP=$BE2_IP" >> $GITHUB_ENV
echo "불러온 BE2 IP => $BE2_IP"
# 7. B1에 .env 전송
- name: Upload .env to BE1
run: |
scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa .env \
ubuntu@$BE1_IP:/home/${{secrets.SERVER_USER}}/AWS_DOCKER/be
# 8. B2에 .env 전송
- name: Upload .env to BE2
run: |
scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa .env \
ubuntu@$BE2_IP:/home/${{secrets.SERVER_USER}}/AWS_DOCKER/be
# 9. BE1 배포
- name: Deploy to BE1
run: |
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa ubuntu@$BE1_IP 'bash -s' <<'EOF'
set -e
cd /home/ubuntu/AWS_DOCKER/be
docker compose down
docker compose pull
docker compose up -d
EOF
# 10. BE2 배포
- name: Deploy to BE2
run: |
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa ubuntu@$BE2_IP 'bash -s' <<'EOF'
set -e
cd /home/ubuntu/AWS_DOCKER/be
docker compose down
docker compose pull
docker compose up -d
EOF