forked from LongD206/LongD
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJenkinsfile
More file actions
318 lines (256 loc) · 11.8 KB
/
Jenkinsfile
File metadata and controls
318 lines (256 loc) · 11.8 KB
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
pipeline {
agent any
environment {
DOCKER = 'sudo docker'
// Dockerfile이 위치한 경로
DOCKERFILE_PATH = './Dockerfile'
MAIN_IMAGE_BE = 'longd-back-image'// 생성할 Docker 이미지 이름 - BE,FE
MAIN_CONTAINER_BE = 'longd-backend'// 생성할 Docker 컨테이너 이름 - BE,FE
MAIN_IMAGE_FE = 'longd-front-image'
MAIN_CONTAINER_FE = 'longd-frontend'
MAIN_IMAGE_SYNCTUBE = 'longd-synctube-image'
MAIN_CONTAINER_SYNCTUBE = 'longd-synctube'
CHAT_IMAGE_BE = 'longd-chat-image'
CHAT_CONTAINER_BE = 'longd-chat'
OPENVIDU_IMAGE_BE = 'longd-openvidu-image'
OPENVIDU_CONTAINER_BE = 'longd-openvidu'
DIRECTORY_BE = 'longD-BE' //BE 디렉터리명
DIRECTORY_FE = 'longd-fe' //FE 디렉터리명
DIRECTORY_CHAT = 'longD-chat' //CHAT 디렉터리명
DIRECTORY_OPENVIDU = 'longd-openvidu' //OPENVIDU 디렉터리명
DIRECTORY_SYNCTUBE = 'longd-SyncTube'
PROJECT_PATH = '/var/jenkins_home/workspace/LongD-develop'
//현재 위치
// currentDir = pwd()
}
stages {
//레포지토리 클론받기
stage('Clone Repository') {
steps {
checkout scm
echo 'Checkout Scm'
}
post {
success { sh 'echo "Successfully Cloned Repository"'}
failure { sh 'echo "Fail Cloned Repository"'}
}
}
//현재 디렉토리 위치 출력
stage('Print Current Directory') {
steps {
script {
def currentDir = pwd()
echo "Current Directory: ${currentDir}"
}
}
}
//////////////////////////////////////////////////////////////////////////////
//FE - 이미지 생성
stage('Build FE image'){
steps {
dir("${DIRECTORY_FE}"){
sh "ls"
sh "docker build -t ${MAIN_IMAGE_FE} -f ${PROJECT_PATH}/longd-fe/Dockerfile ${PROJECT_PATH}/longd-fe"
script {
def currentDir = pwd()
echo "Current Directory: ${currentDir}"
}
}
}
}
//FE - 이전 컨테이너 삭제
stage('Remove Previous FE Container') {
steps {
script {
try {
sh "docker stop ${MAIN_CONTAINER_FE}"
sh "docker rm ${MAIN_CONTAINER_FE}"
} catch (e) {
echo 'fail to stop and remove container'
}
}
}
}
//새 FE 컨테이너 실행
stage('Run New FE image') {
steps {
//FE nginx 설정파일 도커 컨테이너 안으로 복사
//컨테이너의 모든 디렉터리 home/ubuntu/nginx에 볼륨 마운트
// sh "docker run --name ${MAIN_CONTAINER_FE} -d -p 3001:3001 -v /var/run/docker.sock:/var/run/docker.sock -v /etc/letsencrypt:/etc/letsencrypt ${MAIN_IMAGE_FE}"
sh "docker run --name ${MAIN_CONTAINER_FE} -d -p 3001:3001 ${MAIN_IMAGE_FE}"
// sh "docker cp ${PROJECT_PATH}/longd-fe/fe-custom.conf ${MAIN_CONTAINER_FE}:/etc/nginx/conf.d"
echo 'Run New FE image'
script {
def currentDir = pwd()
echo "Current Directory: ${currentDir}"
}
}
}
// //FE 컨테이너 재실행 (nginx 설정 완료 후)
// stage('Restart FE container'){
// steps{
// sh "docker restart ${MAIN_CONTAINER_FE}"
// echo 'FE 컨테이너 재실행'
// }
// }
//////////////////////////////////////////////////////////////////////////////////////////
stage('Copy dist to EC2') {
steps {
//컨테이너의 모든 디렉터리 home/ubuntu/nginx에 볼륨 마운트
sh "docker cp ${MAIN_CONTAINER_FE}:/app/dist ${PROJECT_PATH}"
// sh "docker cp /home/ubuntu/nginx longd-frontend:/usr/share/nginx"
echo 'COPY FE Dist to EC2'
}
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
stage('Build main BE image') {
steps {
sh 'ls -al'
dir("${DIRECTORY_BE}") {
sh 'ls -al'
sh 'chmod +x ./gradlew'
sh './gradlew build'
sh "docker build -t ${MAIN_IMAGE_BE} -f ${PROJECT_PATH}/longD-BE/Dockerfile ${PROJECT_PATH}/longD-BE"
}
echo 'Build main image...'
}
}
//BE - 이전 컨테이너 삭제
stage('Remove Previous main BE Container') {
steps {
script {
try {
sh "docker stop ${MAIN_CONTAINER_BE}"
sh "docker rm ${MAIN_CONTAINER_BE}"
} catch (e) {
echo 'fail to stop and remove main container'
}
}
}
}
//새 BE 컨테이너 실행
stage('Run New main BE image') {
steps {
sh "docker run --name ${MAIN_CONTAINER_BE} -d -p 3000:3000 ${MAIN_IMAGE_BE}"
echo 'Run New main BE image'
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
stage('Build BE-chat image') {
steps {
sh 'ls -al'
dir("${DIRECTORY_CHAT}") {
script {
def currentDir = pwd()
echo "Current Directory: ${currentDir}"
}
sh 'ls -al'
sh 'chmod +x ./gradlew'
sh './gradlew build'
sh "docker build -t ${CHAT_IMAGE_BE} -f ${PROJECT_PATH}/longD-chat/Dockerfile ${PROJECT_PATH}/longD-chat"
}
echo 'Build chat image...'
}
}
//BE - 이전 컨테이너 삭제
stage('Remove Previous BE-chat Container') {
steps {
script {
try {
sh "docker stop ${CHAT_CONTAINER_BE}"
sh "docker rm ${CHAT_CONTAINER_BE}"
} catch (e) {
echo 'fail to stop and remove chat container'
}
}
}
}
//새 BE 컨테이너 실행
stage('Run New BE-chat image') {
steps {
sh "docker run --name ${CHAT_CONTAINER_BE} -d -p 5000:5000 ${CHAT_IMAGE_BE}"
echo 'Run New BE chat image'
}
}
////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
stage('Build main openvidu image') {
steps {
sh 'ls -al'
dir("${DIRECTORY_OPENVIDU}") {
sh 'ls -al'
sh "docker build -t ${OPENVIDU_IMAGE_BE} -f ${PROJECT_PATH}/longd-openvidu/Dockerfile ${PROJECT_PATH}/longd-openvidu"
}
echo 'Build openvidu image...'
}
}
// //BE - 이전 컨테이너 삭제
stage('Remove Previous openvidu BE Container') {
steps {
script {
try {
sh "docker stop ${OPENVIDU_CONTAINER_BE}"
sh "docker rm ${OPENVIDU_CONTAINER_BE}"
} catch (e) {
echo 'fail to stop and remove openvidu container'
}
}
}
}
// //새 BE 컨테이너 실행
stage('Run New main openvidu image') {
steps {
// sh "docker run --name ${OPENVIDU_CONTAINER_BE} -d -p 4000:4000 --rm -e OPENVIDU_RECORDING=true -e OPENVIDU_RECORDING_PATH=opt/openvidu/recordings -v /var/run/docker.sock:/var/run/docker.sock -v opt/openvidu/recordings:/home/recordings ${OPENVIDU_IMAGE_BE}"
sh "docker run --name ${OPENVIDU_CONTAINER_BE} -d -p 4000:4000 --rm -e OPENVIDU_RECORDING=true -e OPENVIDU_RECORDING_PATH=/opt/openvidu/recordings -v /var/run/docker.sock:/var/run/docker.sock -v /opt/openvidu/recordings:/home/recordings ${OPENVIDU_IMAGE_BE}"
echo 'Run New openvidu BE image'
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//SyncTube - 이미지 생성
stage('Build SyncTube image'){
steps {
dir("${DIRECTORY_SYNCTUBE}"){
sh "ls"
sh "docker build -t ${MAIN_IMAGE_SYNCTUBE} -f ${PROJECT_PATH}/longd-SyncTube/Dockerfile ${PROJECT_PATH}/longd-SyncTube"
}
}
}
//SyncTube - 이전 컨테이너 삭제
stage('Remove Previous SyncTube Container') {
steps {
script {
try {
sh "docker stop ${MAIN_CONTAINER_SYNCTUBE}"
sh "docker rm ${MAIN_CONTAINER_SYNCTUBE}"
} catch (e) {
echo 'fail to stop and remove container'
}
}
}
}
//새 SyncTube 컨테이너 실행
stage('Run New SyncTube image') {
steps {
// sh "docker build -t synctube ."
// sh "docker run --name ${MAIN_CONTAINER_SYNCTUBE} --rm -p 4200:4200 -v ${PROJECT_PATH}/longd-SyncTube/res:/usr/src/app/res ${MAIN_IMAGE_SYNCTUBE}"
sh "docker run --name ${MAIN_CONTAINER_SYNCTUBE} --rm -p 4200:4200 -v ${PROJECT_PATH}/longd-SyncTube/user:/usr/src/app/user ${MAIN_IMAGE_SYNCTUBE}"
// sh "docker run --rm -p 4200:4200 -v ${MAIN_CONTAINER_SYNCTUBE}"
//컨테이너의 모든 디렉터리 home/ubuntu/nginx에 볼륨 마운트
// sh "docker run --name ${MAIN_CONTAINER_SYNCTUBE} -d -p 4200:4200 -v /var/run/docker.sock:/var/run/docker.sock -v /etc/letsencrypt:/etc/letsencrypt ${MAIN_IMAGE_SYNCTUBE}"
// sh "docker cp ${PROJECT_PATH}/longd-SyncTube/sync-custom.conf ${MAIN_CONTAINER_SYNCTUBE}:/etc/nginx/conf.d"
// sh "docker cp ${PROJECT_PATH}/longd-SyncTube/Default ${MAIN_CONTAINER_SYNCTUBE}:/etc/nginx/conf.d"
// sh "docker cp /home/ubuntu/nginx longd-frontend:/usr/share/nginx"
echo 'Run New SyncTube image'
}
}
// //SyncTube 컨테이너 재실행 (nginx 설정 완료 후)
// stage('Restart SyncTube container'){
// steps{
// sh "docker restart ${MAIN_CONTAINER_SYNCTUBE}"
// echo 'SyncTube 컨테이너 재실행'
// }
// }
}
}