44 branches : [ main ]
55
66jobs :
7- build-and-deploy :
7+ checkout :
8+ name : Checkout Code
89 runs-on : ubuntu-latest
910 steps :
10- - uses : actions/checkout@v2
11+ - uses : actions/checkout@v2
1112
12- # JDK 셋팅
13- - name : Set up JDK 17
14- uses : actions/setup-java@v2
15- with :
16- java-version : ' 17'
17- distribution : ' adopt'
18-
19- # application.properties 생성
20- - name : Generate application.properties
21- run : |
22- envsubst < ./src/main/resources/application.properties.templates > ./src/main/resources/application.properties
23- env :
24- MYSQL_URL : ${{ secrets.MYSQL_URL }}
25- MYSQL_USER : ${{ secrets.MYSQL_USER }}
26- MYSQL_ROOT_PASSWORD : ${{ secrets.MYSQL_ROOT_PASSWORD }}
27- JWT_SECRET : ${{ secrets.JWT_SECRET }}
28- ROOT_DOMAIN_NAME : ${{ secrets.ROOT_DOMAIN_NAME }}
29- DOMAIN_NAME : ${{ secrets.DOMAIN_NAME }}
30- KAKAO_CLIENT : ${{ secrets.KAKAO_CLIENT }}
31- KAKAO_SECRET : ${{ secrets.KAKAO_SECRET }}
32- ALADIN_TTB_KEY : ${{ secrets.ALADIN_TTB_KEY }}
33- ALADIN_SERVER_URL : ${{ secrets.ALADIN_SERVER_URL }}
34- REDIS_PREFIX : ${{secrets.REDIS_PREFIX}}
35- REDIS_PORT : ${{secrets.REDIS_PORT}}
36- REDIS_TERMS_KEY : ${{secrets.REDIS_TERMS_KEY}}
37- GOOGLE_CLIENT : ${{secrets.GOOGLE_CLIENT}}
38- GOOGLE_SECRET : ${{secrets.GOOGLE_SECRET}}
39-
40-
41- # 프로젝트 빌드
42- - name : Build with Gradle
43- run : |
44- chmod +x ./gradlew
45- ./gradlew build -x test
13+ setup-java :
14+ name : Set up JDK 17
15+ runs-on : ubuntu-latest
16+ needs : checkout
17+ steps :
18+ - uses : actions/checkout@v2
19+ - name : Set up JDK 17
20+ uses : actions/setup-java@v2
21+ with :
22+ java-version : ' 17'
23+ distribution : ' adopt'
4624
47- # 도커허브 로그인
48- - name : Login to DockerHub
49- uses : docker/login-action@v1
50- with :
51- username : ${{ secrets.DOCKERHUB_USERNAME }}
52- password : ${{ secrets.DOCKERHUB_TOKEN }}
25+ generate-properties :
26+ name : Generate application.properties
27+ runs-on : ubuntu-latest
28+ needs : setup-java
29+ steps :
30+ - uses : actions/checkout@v2
31+ - name : Generate application.properties
32+ run : |
33+ envsubst < ./src/main/resources/application.properties.templates > ./src/main/resources/application.properties
34+ env :
35+ MYSQL_URL : ${{ secrets.MYSQL_URL }}
36+ MYSQL_USER : ${{ secrets.MYSQL_USER }}
37+ MYSQL_ROOT_PASSWORD : ${{ secrets.MYSQL_ROOT_PASSWORD }}
38+ JWT_SECRET : ${{ secrets.JWT_SECRET }}
39+ ROOT_DOMAIN_NAME : ${{ secrets.ROOT_DOMAIN_NAME }}
40+ DOMAIN_NAME : ${{ secrets.DOMAIN_NAME }}
41+ KAKAO_CLIENT : ${{ secrets.KAKAO_CLIENT }}
42+ KAKAO_SECRET : ${{ secrets.KAKAO_SECRET }}
43+ ALADIN_TTB_KEY : ${{ secrets.ALADIN_TTB_KEY }}
44+ ALADIN_SERVER_URL : ${{ secrets.ALADIN_SERVER_URL }}
45+ REDIS_PREFIX : ${{ secrets.REDIS_PREFIX }}
46+ REDIS_PORT : ${{ secrets.REDIS_PORT }}
47+ REDIS_TERMS_KEY : ${{ secrets.REDIS_TERMS_KEY }}
48+ GOOGLE_CLIENT : ${{ secrets.GOOGLE_CLIENT }}
49+ GOOGLE_SECRET : ${{ secrets.GOOGLE_SECRET }}
5350
54- # 도커이미지 빌드&푸쉬
55- - name : Build and push Docker image
56- uses : docker/build-push-action@v2
57- with :
58- context : .
59- push : true
60- tags : ${{ secrets.DOCKERHUB_USERNAME }}/bbegok:latest
6151
62- # env 셋팅
63- - name : Create .env file
64- run : |
65- envsubst < ./configuration/.env.template > ./configuration/.env
66- env :
67- DOCKERHUB_USERNAME : ${{ secrets.DOCKERHUB_USERNAME }}
68- DOCKERHUB_TOKEN : ${{ secrets.DOCKERHUB_TOKEN }}
69- MYSQL_URL : ${{ secrets.MYSQL_URL }}
70- MYSQL_USER : ${{ secrets.MYSQL_USER }}
71- MYSQL_PASSWORD : ${{ secrets.MYSQL_PASSWORD }}
72- MYSQL_ROOT_PASSWORD : ${{ secrets.MYSQL_ROOT_PASSWORD }}
73- DOMAIN_NAME : ${{ secrets.DOMAIN_NAME }}
74- SSL_CERT_PATH : ${{ secrets.SSL_CERT_PATH }}
75- SSL_CERTIFICATE : ${{ secrets.SSL_CERTIFICATE }}
76- SSL_CERTIFICATE_KEY : ${{ secrets.SSL_CERTIFICATE_KEY }}
52+ build :
53+ name : Build with Gradle
54+ runs-on : ubuntu-latest
55+ needs : generate-properties
56+ steps :
57+ - uses : actions/checkout@v2
58+ - name : Build with Gradle
59+ run : |
60+ chmod +x ./gradlew
61+ ./gradlew build -x test
7762
78- # nginx.config 셋팅
79- - name : Create nginx.conf from template
80- run : |
81- envsubst '${DOMAIN_NAME} ${SSL_CERTIFICATE} ${SSL_CERTIFICATE_KEY}' < ./configuration/nginx.conf.template > ./configuration/nginx.conf
82- env :
83- DOMAIN_NAME : ${{ secrets.DOMAIN_NAME }}
84- SSL_CERTIFICATE : ${{ secrets.SSL_CERTIFICATE }}
85- SSL_CERTIFICATE_KEY : ${{ secrets.SSL_CERTIFICATE_KEY }}
63+ docker :
64+ name : Build and Push Docker Image
65+ runs-on : ubuntu-latest
66+ needs : build
67+ steps :
68+ - uses : actions/checkout@v2
69+ - name : Login to DockerHub
70+ uses : docker/login-action@v1
71+ with :
72+ username : ${{ secrets.DOCKERHUB_USERNAME }}
73+ password : ${{ secrets.DOCKERHUB_TOKEN }}
74+ - name : Build and push Docker image
75+ uses : docker/build-push-action@v2
76+ with :
77+ context : .
78+ push : true
79+ tags : ${{ secrets.DOCKERHUB_USERNAME }}/bbegok:latest
8680
87- # configuration/이하의 파일을 서버로 복사
88- - name : Copy files to Raspberry Pi
89- uses : appleboy/scp-action@master
90- with :
91- host : ${{ secrets.PI_HOST }}
92- port : ${{ secrets.PI_PORT }}
93- username : ${{ secrets.PI_USERNAME }}
94- password : ${{ secrets.PI_PASSWORD }}
95- source : " ./configuration/*"
96- target : " Project/bbegok/"
97- strip_components : 1
98-
81+ prepare-deployment :
82+ name : Prepare Deployment Files
83+ runs-on : ubuntu-latest
84+ needs : docker
85+ steps :
86+ - uses : actions/checkout@v2
87+ - name : Create .env file
88+ run : |
89+ envsubst < ./configuration/.env.template > ./configuration/.env
90+ env :
91+ DOCKERHUB_USERNAME : ${{ secrets.DOCKERHUB_USERNAME }}
92+ DOCKERHUB_TOKEN : ${{ secrets.DOCKERHUB_TOKEN }}
93+ MYSQL_URL : ${{ secrets.MYSQL_URL }}
94+ MYSQL_USER : ${{ secrets.MYSQL_USER }}
95+ MYSQL_PASSWORD : ${{ secrets.MYSQL_PASSWORD }}
96+ MYSQL_ROOT_PASSWORD : ${{ secrets.MYSQL_ROOT_PASSWORD }}
97+ DOMAIN_NAME : ${{ secrets.DOMAIN_NAME }}
98+ SSL_CERT_PATH : ${{ secrets.SSL_CERT_PATH }}
99+ SSL_CERTIFICATE : ${{ secrets.SSL_CERTIFICATE }}
100+ SSL_CERTIFICATE_KEY : ${{ secrets.SSL_CERTIFICATE_KEY }}
101+ - name : Create nginx.conf from template
102+ run : |
103+ envsubst '${DOMAIN_NAME} ${SSL_CERTIFICATE} ${SSL_CERTIFICATE_KEY}' < ./configuration/nginx.conf.template > ./configuration/nginx.conf
104+ env :
105+ DOMAIN_NAME : ${{ secrets.DOMAIN_NAME }}
106+ SSL_CERTIFICATE : ${{ secrets.SSL_CERTIFICATE }}
107+ SSL_CERTIFICATE_KEY : ${{ secrets.SSL_CERTIFICATE_KEY }}
99108
100- # 라즈베리파이 서버에 배포
101- - name : Deploy to Raspberry Pi
102- uses : appleboy/ssh-action@master
103- with :
104- host : ${{ secrets.PI_HOST }}
105- port : ${{ secrets.PI_PORT }}
106- username : ${{ secrets.PI_USERNAME }}
107- password : ${{ secrets.PI_PASSWORD }}
108- script : |
109- cd Project/bbegok/
110- docker-compose pull
111- docker-compose down
112- docker-compose up -d
113- docker image prune -f
109+ deploy :
110+ name : Deploy to Raspberry Pi
111+ runs-on : ubuntu-latest
112+ needs : prepare-deployment
113+ steps :
114+ - uses : actions/checkout@v2
115+ - name : Copy files to Raspberry Pi
116+ uses : appleboy/scp-action@master
117+ with :
118+ host : ${{ secrets.PI_HOST }}
119+ port : ${{ secrets.PI_PORT }}
120+ username : ${{ secrets.PI_USERNAME }}
121+ password : ${{ secrets.PI_PASSWORD }}
122+ source : " ./configuration/*"
123+ target : " Project/bbegok/"
124+ strip_components : 1
125+ - name : Deploy to Raspberry Pi
126+ uses : appleboy/ssh-action@master
127+ with :
128+ host : ${{ secrets.PI_HOST }}
129+ port : ${{ secrets.PI_PORT }}
130+ username : ${{ secrets.PI_USERNAME }}
131+ password : ${{ secrets.PI_PASSWORD }}
132+ script : |
133+ cd Project/bbegok/
134+ docker-compose pull
135+ docker-compose down
136+ docker-compose up -d
137+ docker image prune -f
114138
115- - name : Discord Webhook when success
116- if : success()
117- env :
118- DISCORD_WEBHOOK : ${{ secrets.DISCORD_WEBHOOK }}
119- uses : Ilshidur/action-discord@master
120- with :
121- args : |
122- ## **:tada: 빼곡서버 배포 SUCCESS!**
139+ notify-success :
140+ name : Discord Webhook Notification on Success
141+ runs-on : ubuntu-latest
142+ needs : deploy
143+ if : ${{ success() }}
144+ steps :
145+ - name : Send Success Discord Notification
146+ uses : Ilshidur/action-discord@master
147+ with :
148+ args : |
149+ ## **:tada: 빼곡서버 배포 SUCCESS!**
150+ env :
151+ DISCORD_WEBHOOK : ${{ secrets.DISCORD_WEBHOOK }}
123152
124- - name : Discord Webhook when fail
125- if : failure()
126- env :
127- DISCORD_WEBHOOK : ${{ secrets.DISCORD_WEBHOOK }}
128- uses : Ilshidur/action-discord@master
129- with :
130- args : |
131- ## **:fire: 빼곡서버 배포 FAIL!**
132- **message** | ${{ github.event.head_commit.message }}
133- **commit** | ${{ github.sha }}
134- **go to log** | ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
153+ notify-failure :
154+ name : Discord Webhook Notification on Failure
155+ runs-on : ubuntu-latest
156+ needs : deploy
157+ if : ${{ failure() }}
158+ steps :
159+ - name : Send Failure Discord Notification
160+ uses : Ilshidur/action-discord@master
161+ with :
162+ args : |
163+ ## **:fire: 빼곡서버 배포 FAIL!**
164+ **message** | ${{ github.event.head_commit.message }}
165+ **commit** | ${{ github.sha }}
166+ **go to log** | ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
167+ env :
168+ DISCORD_WEBHOOK : ${{ secrets.DISCORD_WEBHOOK }}
0 commit comments