Skip to content

Commit 752af2a

Browse files
committed
🔨 ci/cd 스크립트 수정
1 parent 8329e5c commit 752af2a

File tree

1 file changed

+151
-117
lines changed

1 file changed

+151
-117
lines changed

.github/workflows/deploy.yml

Lines changed: 151 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -4,131 +4,165 @@ on:
44
branches: [ main ]
55

66
jobs:
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

Comments
 (0)