feat: 배포 스크립트에 flyway DB URL 추가 #30
This file contains 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: 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 | |
# Flyway를 사용하여 데이터베이스 스키마 변경을 적용 | |
- name: Run Database Migration # 새로운 마이그레이션 스크립트를 실행 | |
run: ./gradlew flywayMigrate | |
env: | |
SPRING_PROFILES_ACTIVE: cd | |
DB_HOST: ${{ secrets.DB_HOST }} | |
DB_USERNAME: root | |
DB_PASSWORD: ${{ secrets.DB_PASSWORD }} | |
DB_URL: jdbc:mysql://${{ secrets.DB_HOST }}:3306/teampu | |
- 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 | |
- 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 | |