[Feat] develop 브랜치에 PR 적용시 Github Actions 작동되게 변경 #34
Workflow file for this run
This file contains hidden or 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: Spring Push CI/CD (v 1.3) | |
| env: | |
| IMAGE_TAG: 1.0.0 | |
| on: | |
| pull_request: | |
| branches: | |
| - develop | |
| 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 | |