From 09876a411a03ad7abe1c8a0590f7dac300b3e304 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Torma=20Krist=C3=B3f?= <tormakristof@tormakristof.eu>
Date: Wed, 3 Feb 2021 16:07:44 +0100
Subject: [PATCH] create better deploy using experience from frontend memery

---
 .gitlab-ci.yml     | 29 +++++++++++++++++++++-----
 k8s/deployment.yml | 52 ++++++++++++++++++++++++++++++++++++++++++++++
 k8s/service.yml    | 15 +++++++++++++
 3 files changed, 91 insertions(+), 5 deletions(-)
 create mode 100644 k8s/deployment.yml
 create mode 100644 k8s/service.yml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d0041e6..704bfda 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,7 +1,7 @@
-image: python:latest
+image: python:3.9
 
 services:
-  - postgres:latest
+  - postgres:13
 
 variables:
   POSTGRES_DB: kszkepzes
@@ -16,6 +16,7 @@ cache:
 stages:
   - Test and Flake8
   - Docker Build
+  - deploy
 
 Flake8:
   stage: Test and Flake8
@@ -23,7 +24,7 @@ Flake8:
     - dev
     - master
     - tags
-  tags: [docker]
+  tags: [kszk]
   script:
     - python -V
     - python3 -m venv env
@@ -37,7 +38,7 @@ Flake8:
 #   only:
 #     - dev
 #     - master
-#   tags: [docker]
+#   tags: [kszk]
 #   variables:
 #     DATABASE_URL: 'postgresql://postgres:postgres@postgres:5432/$POSTGRES_DB'
 #     SECRET_KEY: 'secret'
@@ -52,7 +53,7 @@ Flake8:
 
 Docker build:
   stage: Docker Build
-  tags: [docker]
+  tags: [kszk]
   only:
     - tags
   image:
@@ -61,3 +62,21 @@ Docker build:
   script:
     - echo "{\"auths\":{\"registry.kszk.bme.hu\":{\"username\":\"$REGISTRY_USER\",\"password\":\"$REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
     - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CONTAINER_IMAGE
+
+Deploy to Kubernetes:
+  stage: deploy
+  image: alpine
+  tags: [devteam]
+  environment:
+    name: master
+  script:
+    - apk add --no-cache curl
+    - curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
+    - chmod +x ./kubectl
+    - mv ./kubectl /usr/local/bin/kubectl
+    - kubectl version
+    - cd k8s
+    - sed -i "s|##IMAGETAG##|${CI_COMMIT_REF_NAME}|" deployment.yml
+    - kubectl apply -f deployment.yml
+  only:
+    - tags
diff --git a/k8s/deployment.yml b/k8s/deployment.yml
new file mode 100644
index 0000000..5df38b1
--- /dev/null
+++ b/k8s/deployment.yml
@@ -0,0 +1,52 @@
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: kszkepzes-backend
+  namespace: devteam-kszk-bme-hu
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: kszkepzes-backend
+  template:
+    metadata:
+      labels:
+        app: kszkepzes-backend
+    spec:
+      initContainers:
+        - name: volume-mount-hack
+          image: busybox
+          command: ['sh', '-c', 'chown -R 1000:1000 /mediafiles']
+          volumeMounts:
+            - name: kszkepzes-media-volume
+              mountPath: /mediafiles
+        - name: kszkepzes-backend-migrate
+          image: rlacko58/kszkepzes-backend:latest
+          imagePullPolicy: 'Always'
+          command: ['python', 'manage.py', 'migrate', '--noinput']
+          envFrom:
+            - configMapRef:
+                name: kszkepzes-config
+            - secretRef:
+                name: kszkepzes-secret-config
+      containers:
+        - name: kszkepzes-backend
+          image: registry.kszk.bme.hu/kszk/devteam/kszkepzes-backend:##IMAGETAG##
+          imagePullPolicy: 'Always'
+          volumeMounts:
+            - mountPath: /home/app/kszkepzes-backend/mediafiles
+              name: kszkepzes-media-volume
+          ports:
+            - containerPort: 8000
+          envFrom:
+            - configMapRef:
+                name: kszkepzes-config
+            - secretRef:
+                name: kszkepzes-secret-config
+      volumes:
+        - name: kszkepzes-media-volume
+          persistentVolumeClaim:
+            claimName: kszkepzes-media-pv-claim
+      imagePullSecrets:
+        - name: kszkepzes-regcred
\ No newline at end of file
diff --git a/k8s/service.yml b/k8s/service.yml
new file mode 100644
index 0000000..9bb1dd0
--- /dev/null
+++ b/k8s/service.yml
@@ -0,0 +1,15 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: kszkepzes-backend
+  namespace: devteam-kszk-bme-hu
+spec:
+  type: ClusterIP
+  ports:
+    - port: 8000
+      targetPort: 8000
+      name: back
+      protocol: TCP
+  selector:
+    app: kszkepzes-backend
\ No newline at end of file
-- 
GitLab