Skip to content

fix:yml

fix:yml #220

Workflow file for this run

name: Backend CI/CD
on:
pull_request:
types: [ opened, synchronize, closed ]
branches: [dev]
paths:
- 'src/**'
- '.github/**'
jobs:
test:
if: github.event.action == 'opened' || github.event.action == 'synchronize'
runs-on: ubuntu-latest
environment: test
steps:
- name: Checkout the code
uses: actions/checkout@v4
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'corretto'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Run tests
env:
DB_DRIVER: "org.h2.Driver"
DB_URL: "jdbc:h2:mem:dnd_13th_5team_test;MODE=MYSQL"
DB_USERNAME: "sa"
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_KEY: ${{ secrets.AWS_SECRET_KEY }}
run: ./gradlew test --info
image-build:
if: github.event.action == 'closed' && github.event.pull_request.merged == true
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
environment: dev
outputs:
image_build_result: ${{ steps.image-build-result.outputs.image_build_result }}
continue-on-error: true
steps:
- name: Checkout the code
uses: actions/checkout@v4
- name: Set up jdk
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'corretto'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with gradle
run: ./gradlew bootJar -Pspring.profiles.active=dev --info
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_REGION }}
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
- name: Login to Amazon ECR
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'true'
- name: Docker build & push
id: docker-build-and-push
run: |
docker build --platform linux/arm64 -f docker/Dockerfile --tag ${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:${{ github.sha }} .
docker push ${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:${{ github.sha }}
- name: Set image build result
if: always()
id: image-build-result
run: |
echo "image_build_result=fail" >> $GITHUB_OUTPUT
if [[ ${{ steps.docker-build-and-push.outcome }} == "success" ]]; then
echo "image_build_result=success" >> $GITHUB_OUTPUT
fi
deploy-dev:
needs: [ image-build ]
runs-on: dnd-13th-5team-ec2-dev-runner
environment: dev
continue-on-error: true
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v3
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Create .env file
run: |
cd ~/project
cat <<EOF > .env
# springboot-app environment
SPRINGBOOT_APP_IMAGE_REPOSITORY=${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}
SPRINGBOOT_APP_IMAGE_TAG=${{ github.sha }}
# mysql environment
DB_NAME=${{ secrets.DB_NAME }}
DB_USERNAME=${{ secrets.DB_USERNAME }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
DB_URL=${{ secrets.DB_URL }}
# jwt environment
JWT_SECRET=${{ secrets.JWT_SECRET }}
ACCESS_EXPIRATION=${{ secrets.ACCESS_EXPIRATION }}
REFRESH_EXPIRATION=${{ secrets.REFRESH_EXPIRATION }}
# kakao OAuth
KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}
KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}
KAKAO_REDIRECT_URL=${{ secrets.KAKAO_REDIRECT_URL }}
KAKAO_AUTHORIZATION_URI=${{ secrets.KAKAO_AUTHORIZATION_URI }}
KAKAO_TOKEN_URI=${{ secrets.KAKAO_TOKEN_URI }}
KAKAO_USER_INFO_URI=${{ secrets.KAKAO_USER_INFO_URI }}
# AWS
AWS_REGION=${{ secrets.AWS_REGION }}
AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_KEY=${{ secrets.AWS_SECRET_KEY }}
# front uri
FRONT_REDIRECT_URI=${{ secrets.FRONT_REDIRECT_URI }}
EOF
- name: Start new server application
id: start-new-server-application
run: |
cd ~/project
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | sudo docker login --username AWS --password-stdin ${{ secrets.ECR_REGISTRY }}
sudo docker-compose stop springboot-app
sudo docker-compose rm -f springboot-app
sudo docker images --filter=reference="*/springboot-app-dev:*" -q | xargs -r sudo docker rmi -f
sudo docker-compose up -d springboot-app
sudo rm -rf .env