-
Notifications
You must be signed in to change notification settings - Fork 0
148 lines (120 loc) · 4.14 KB
/
cicd.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
name: controlG
on:
push:
branches: [ "release" ]
permissions:
contents: read
env:
BE_WORKING_DIR: ./be/controlG
NGINX_WORKING_DIR: ./nginx
APPLICATION_FILE_PATH: ./src/main/resources/application.yml
FE_WORKING_DIR: ./fe
FE_ENV_PATH: ./.env
FE_DOCKER_FILE_PATH: ./Dockerfile
jobs:
# Job[1]: BACKEND -> docker hub로 build & push
be-deploy:
runs-on: ubuntu-latest
services:
mysql_db:
image: mysql:8.0.23
ports:
- 3306:3306
env:
MYSQL_DATABASE: controlg
MYSQL_ROOT_PASSWORD: 1234
redis:
image: redis:latest
ports:
- 6379:6379
defaults:
run:
working-directory: ${{ env.BE_WORKING_DIR }}
steps:
# 1. Source 단계
- name: Checkout Source Code
uses: actions/checkout@v3
# JDK 세팅
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# 2. yml 파일 변경
- name: Change Spring Active Profile
run: |
touch '${{ env.APPLICATION_FILE_PATH }}'
echo '${{ secrets.APPLICATION }}' > '${{ env.APPLICATION_FILE_PATH }}'
# 3. build 단계
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build -Djasypt.encryptor.password=${{ secrets.JASYPT_SECRET }}
# 4. docker hub로 build & push
- name: docker build and push
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-be:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-be:latest
fe-deploy:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ${{ env.FE_WORKING_DIR }}
steps:
# 1. Source 단계
- name: Checkout Source Code
uses: actions/checkout@v3
# Node 세팅
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: "18"
# 2. .env 파일 변경
- name: create .env File
run: |
echo "${{ secrets.ENV }}" > "${{ env.FE_ENV_PATH }}"
# 2. 도커파일 생성
- name: create Docker File
run: |
echo "${{ secrets.FE_DOCKER_FILE }}" > "${{ env.FE_DOCKER_FILE_PATH }}"
# 2. docker hub로 build & push
- name: docker build and push
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-fe:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-fe:latest
# job[2]: nginx -> docker hub로 build & push
nginx-deploy:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ${{ env.NGINX_WORKING_DIR }}
steps:
# 1. Source 단계
- name: Checkout Source Code
uses: actions/checkout@v3
# 2. docker hub로 build & push
- name: docker build and push
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-nginx:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-nginx:latest
# job[3]: EC2에서 docker 이미지 pull하고 실행
SSH-Transfer:
needs: [ be-deploy, nginx-deploy , fe-deploy ]
runs-on: ubuntu-latest
steps:
- name: SSH Transfer
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ubuntu
key: ${{ secrets.KEY }}
script: |
sudo docker-compose down -v
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-be:latest
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-fe:latest
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/control-g-team-5-nginx:latest
sudo docker-compose up -d
sudo docker image prune -a -f