Skip to content

Merge pull request #84 from TeamPu/fix/#70 #25

Merge pull request #84 from TeamPu/fix/#70

Merge pull request #84 from TeamPu/fix/#70 #25

Workflow file for this run

name: Deploy spring-boot app to GCP k3s cluster
on:
push:
branches: [ develop ]
paths-ignore:
- '**.md'
- 'docs/**'
- '.gitignore'
permissions:
contents: write
jobs:
Deploy-docker-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3 # repo에 있는 파일들 self-host 머신에 복제
- name: Set up JDK 17 # jdk 셋업 17로 해야되나??
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
check-latest: true
- name: Setup Build with Gradle # gradle 셋업
uses: gradle/gradle-build-action@v2
with:
gradle-version: current
arguments: build # Gradle의 'build' 태스크를 실행
- name: DB secret capture
run: |
echo "DB_HOST=${{ secrets.DB_HOST }}" >> $GITHUB_ENV
echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> $GITHUB_ENV
- name: Build # JAR 빌드
run: |
chmod +x ./gradlew
./gradlew build -Dspring.profiles.active=cd
- name: Set lowercase repository name without owner environment variable
run: |
echo "REPOSITORY_NAME=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]' | cut -d'/' -f2)" >> $GITHUB_ENV
- name: Get lowercase branch name
run: |
echo "BRANCH_NAME=$(echo $GITHUB_REF_NAME | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
- name: Get docker image name
run: |
echo "IMAGE_NAME=${{ secrets.DOCKER_USERNAME }}/${{ env.REPOSITORY_NAME }}:${{ env.BRANCH_NAME }}" >> $GITHUB_ENV
- name: Build spring docker image
run: |
docker build -t ${{ env.IMAGE_NAME }} .
docker tag ${{ env.IMAGE_NAME }} ${{ secrets.DOCKER_USERNAME }}/${{ env.REPOSITORY_NAME }}:latest
- name: Push docker image
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker push ${{ env.IMAGE_NAME }}
docker push ${{ secrets.DOCKER_USERNAME }}/${{ env.REPOSITORY_NAME }}:latest
Deploy:
needs: Deploy-docker-image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3 # repo에 있는 파일들 self-host 머신에 복제
- name: Transport docker-compose.yaml to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.GCP_HOST }}
username: ${{ secrets.GCP_USERNAME }}
key: ${{ secrets.GCP_SECRET_ACCESS_KEY }}
passphrase: ${{ secrets.GCP_SECRET_ACCESS_KEY_PASSPHRASE }}
overwrite: true
source: ./manifest/spring-redis.yml
target: ~/spring-redis
# Flyway를 사용하여 데이터베이스 스키마 변경을 적용
- name: Run Database Migration # 새로운 마이그레이션 스크립트를 실행
run: ./gradlew flywayMigrate
env:
SPRING_PROFILES_ACTIVE: cd
SPRING_DATASOURCE_URL: jdbc:mysql://${{ secrets.DB_HOST }}:3306/teampu
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: ${{ secrets.DB_PASSWORD }}
FLYWAY_BASELINE_ON_MIGRATE: "true"
# Gradle 캐시를 초기화하고 모든 의존성을 새로 다운로드하여 빌드
- name: Build with Gradle
run: |
./gradlew clean build --refresh-dependencies
- name: Connect to GCP with SSH
uses: appleboy/[email protected]
with:
host: ${{ secrets.GCP_HOST }}
username: ${{ secrets.GCP_USERNAME }}
key: ${{ secrets.GCP_SECRET_ACCESS_KEY }}
passphrase: ${{ secrets.GCP_SECRET_ACCESS_KEY_PASSPHRASE }}
script: |
kubectl delete -f ~/spring-redis/manifest/spring-redis.yml
kubectl apply -f ~/spring-redis/manifest/spring-redis.yml