diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8d8a29ac8a33fcbef1676099c6431968c282463e
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,15 @@
+deploy:
+  stage: deploy
+  image: lwolf/helm-kubectl-docker
+  rules:
+    - if: $CI_COMMIT_REF_NAME == "master"
+      changes:
+      - values.yaml
+      - .gitmodules
+  environment:
+    name: production/edugit
+  script:
+    - helm upgrade --install $CI_ENVIRONMENT_SLUG code-server/ci/helm-chart
+        --set podAnnotations.'app\.gitlab\.com'/env=$CI_ENVIRONMENT_SLUG
+        --set podAnnotations.'app\.gitlab\.com'/app=$CI_PROJECT_PATH_SLUG
+        -f values.yaml
diff --git a/values.yaml b/values.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..c0f64da2858d472f7e0a2478ae1252c76f068a32
--- /dev/null
+++ b/values.yaml
@@ -0,0 +1,33 @@
+ingress:
+  enabled: true
+  annotations:
+    kubernetes.io/ingress.class: nginx
+    kubernetes.io/tls-acme: "true"
+  hosts:
+    - host: code.edugit.org
+      paths:
+        - /
+  tls:
+    - secretName: code-server-tls
+      hosts:
+        - code.edugit.org
+
+extraArgs: []
+extraVars: []
+affinity: {}
+
+persistence:
+  enabled: false
+
+extraSecretMounts: []
+  # - name: secret-files
+  #   mountPath: /etc/secrets
+  #   secretName: code-server-secret-files
+  #   readOnly: true
+
+extraConfigmapMounts: []
+  # - name: certs-configmap
+  #   mountPath: /etc/code-server/ssl/
+  #   subPath: certificates.crt # (optional)
+  #   configMap: certs-configmap
+  #   readOnly: true