-
Notifications
You must be signed in to change notification settings - Fork 0
105 lines (86 loc) · 3.56 KB
/
deploy.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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