-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild-deployment-file.sh
executable file
·273 lines (269 loc) · 5.9 KB
/
build-deployment-file.sh
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
#!/bin/bash
APP_NAME="digitalhublms-$CI_DEPLOYMENT_ENV_NAME"
APP_WEB_NAME="digitalhublms-web-$CI_DEPLOYMENT_ENV_NAME"
APP_MIG_NAME="digitalhublms-mig-$CI_DEPLOYMENT_ENV_NAME"
APP_API_NAME="digitalhublms-api-$CI_DEPLOYMENT_ENV_NAME"
APP_DISK_PV_NAME="$APP_NAME-pv-claim"
APP_DB_NAME="mssql-$CI_DEPLOYMENT_ENV_NAME"
APP_DB_STORAGE_NAME="mssql-persistent-storage"
APP_DB_STORAGE_PATH="/var/opt/mssql"
APP_DB_DISK_PV_NAME="$APP_DB_NAME-pv-claim"
APP_DB_IMAGE="mcr.microsoft.com/mssql/server:2017-latest"
APP_DB_PORT="1433"
APP_VOLUME_NAME="dotnetcore-app-volume"
APP_SECRETS_NAME="dotnetcore-app-secrets"
cat > deployment.yml <<EOL
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
labels:
app: $APP_NAME
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
---
apiVersion: v1
kind: Service
metadata:
name: $APP_DB_NAME
labels:
app: $APP_DB_NAME
spec:
type: LoadBalancer
selector:
app: $APP_DB_NAME
tier: dbserver
ports:
- name: $APP_DB_NAME
port: $APP_DB_PORT
protocol: TCP
targetPort: $APP_DB_PORT
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: $APP_DB_DISK_PV_NAME
labels:
app: $APP_NAME
spec:
storageClassName: fast
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: $APP_DB_NAME
labels:
app: $APP_DB_NAME
spec:
selector:
matchLabels:
app: $APP_DB_NAME
tier: dbserver
strategy:
type: Recreate
template:
metadata:
labels:
app: $APP_DB_NAME
tier: dbserver
spec:
containers:
- name: $APP_DB_NAME
image: $APP_DB_IMAGE
ports:
- containerPort: $APP_DB_PORT
env:
- name: MSSQL_PID
value: "Developer"
- name: ACCEPT_EULA
value: "Y"
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
name: $APP_SECRETS_NAME
key: DB_PASSWORD
name: $APP_DB_NAME
volumeMounts:
- name: $APP_DB_STORAGE_NAME
mountPath: $APP_DB_STORAGE_PATH
volumes:
- name: $APP_DB_STORAGE_NAME
persistentVolumeClaim:
claimName: $APP_DB_DISK_PV_NAME
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: $APP_MIG_NAME
labels:
app: $APP_MIG_NAME
spec:
replicas: 1
selector:
matchLabels:
app: $APP_MIG_NAME
tier: backend
strategy:
type: Recreate
template:
metadata:
labels:
app: $APP_MIG_NAME
tier: backend
spec:
containers:
- name: $APP_MIG_NAME
image: $CI_BUILD_MIG_IMAGE_VERSION
imagePullPolicy: Always
ports:
- containerPort: 80
- containerPort: 443
envFrom:
- secretRef:
name: $APP_SECRETS_NAME
imagePullSecrets:
- name: registry.gitlab.com
---
apiVersion: v1
kind: Service
metadata:
name: $APP_WEB_NAME
labels:
app: $APP_WEB_NAME
spec:
selector:
app: $APP_WEB_NAME
tier: backend
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: $APP_DISK_PV_NAME
labels:
app: $APP_NAME
spec:
storageClassName: fast
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: $APP_WEB_NAME
labels:
app: $APP_WEB_NAME
spec:
replicas: 1
selector:
matchLabels:
app: $APP_WEB_NAME
tier: backend
strategy:
type: Recreate
template:
metadata:
labels:
app: $APP_WEB_NAME
tier: backend
spec:
volumes:
- name: $APP_VOLUME_NAME
persistentVolumeClaim:
claimName: $APP_DISK_PV_NAME
containers:
- name: $APP_WEB_NAME
image: $CI_BUILD_WEB_IMAGE_VERSION
imagePullPolicy: Always
ports:
- containerPort: 80
- containerPort: 443
envFrom:
- secretRef:
name: $APP_SECRETS_NAME
volumeMounts:
- name: $APP_VOLUME_NAME
mountPath: /app/gce-persistent-disk
imagePullSecrets:
- name: registry.gitlab.com
---
apiVersion: v1
kind: Service
metadata:
name: $APP_API_NAME
labels:
app: $APP_API_NAME
spec:
selector:
app: $APP_API_NAME
tier: backend
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: $APP_API_NAME
labels:
app: $APP_API_NAME
spec:
replicas: 1
selector:
matchLabels:
app: $APP_API_NAME
tier: backend
strategy:
type: Recreate
template:
metadata:
labels:
app: $APP_API_NAME
tier: backend
spec:
volumes:
- name: $APP_VOLUME_NAME
persistentVolumeClaim:
claimName: $APP_DISK_PV_NAME
containers:
- name: $APP_API_NAME
image: $CI_BUILD_API_IMAGE_VERSION
imagePullPolicy: Always
ports:
- containerPort: 80
- containerPort: 443
envFrom:
- secretRef:
name: $APP_SECRETS_NAME
volumeMounts:
- name: $APP_VOLUME_NAME
mountPath: /app/gce-persistent-disk
imagePullSecrets:
- name: registry.gitlab.com
EOL