summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2017-01-27 15:01:29 +0100
committerKamil Trzcinski <ayufan@ayufan.eu>2017-01-27 15:24:27 +0100
commitb17bbaa072573d1290f3b59fddaf04ba5daa7ead (patch)
treedbc2be104e90c282aaac4175f80b1b784ea81957
parent637894de8868b05499a275e1685621473addef58 (diff)
downloadgitlab-ce-enable-review-apps.tar.gz
Add review apps supportenable-review-apps
-rw-r--r--.gitlab-ci.yml38
-rwxr-xr-xscripts/deploy-review122
2 files changed, 159 insertions, 1 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d30deef0096..310a9850a50 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,6 +17,9 @@ variables:
PHANTOMJS_VERSION: "2.1.1"
GET_SOURCES_ATTEMPTS: "3"
+ # Review apps deployment domain
+ KUBE_DOMAIN: gitlab-review-apps.ayucloud.ovh
+
before_script:
- source ./scripts/prepare_build.sh
- cp config/gitlab.yml.example config/gitlab.yml
@@ -27,6 +30,7 @@ before_script:
stages:
- prepare
+- review
- test
- post-test
- pages
@@ -232,7 +236,7 @@ spinach 9 10 ruby21: *spinach-knapsack-ruby21
script:
- bundle exec $CI_BUILD_NAME
-rubocop:
+rubocop:
<<: *ruby-static-analysis
<<: *dedicated-runner
stage: test
@@ -473,3 +477,35 @@ cache gems:
- vendor/cache
only:
- master@gitlab-org/gitlab-ce
+
+### REVIEW APPS
+
+review:
+ image: registry.gitlab.com/gitlab-examples/kubernetes-deploy
+ stage: prepare
+ before_script: []
+ cache: {}
+ script:
+ - scripts/deploy-review
+ environment:
+ name: review/$CI_BUILD_REF_NAME
+ url: http://$CI_ENVIRONMENT_SLUG.$KUBE_DOMAIN
+ on_stop: stop_review
+ only:
+ - branches@gitlab-org/gitlab-ce
+
+stop_review:
+ image: registry.gitlab.com/gitlab-examples/kubernetes-deploy
+ stage: review
+ variables:
+ GIT_STRATEGY: none
+ before_script: []
+ cache: {}
+ script:
+ - command destroy
+ environment:
+ name: review/$CI_BUILD_REF_NAME
+ action: stop
+ when: manual
+ only:
+ - branches@gitlab-org/gitlab-ce
diff --git a/scripts/deploy-review b/scripts/deploy-review
new file mode 100755
index 00000000000..6cbab3aaf36
--- /dev/null
+++ b/scripts/deploy-review
@@ -0,0 +1,122 @@
+#!/bin/bash
+
+source "/opt/kubernetes-deploy/src/common.bash"
+
+export GITLAB_REVIEW_APP_IMAGE=ayufan/gitlab-development-kit
+
+if [[ -z "$CI_ENVIRONMENT_URL" ]]; then
+ echo "Reading CI_ENVIRONMENT_URL from .gitlab-ci.yml..."
+ CI_ENVIRONMENT_URL="$(ruby -ryaml -e 'puts YAML.load_file(".gitlab-ci.yml")[ENV["CI_BUILD_NAME"]]["environment"]["url"]')"
+ CI_ENVIRONMENT_URL="$(eval echo "$CI_ENVIRONMENT_URL")"
+ echo "CI_ENVIRONMENT_URL: $CI_ENVIRONMENT_URL"
+fi
+
+ensure_deploy_variables
+create_kubeconfig
+
+CI_ENVIRONMENT_HOSTNAME="${CI_ENVIRONMENT_URL}"
+CI_ENVIRONMENT_HOSTNAME="${CI_ENVIRONMENT_HOSTNAME/http:\/\//}"
+CI_ENVIRONMENT_HOSTNAME="${CI_ENVIRONMENT_HOSTNAME/https:\/\//}"
+
+cat <<EOF | kubectl apply -f -
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: $KUBE_NAMESPACE
+EOF
+
+cat <<EOF | kubectl apply -n $KUBE_NAMESPACE -f -
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: $CI_ENVIRONMENT_SLUG
+ namespace: $KUBE_NAMESPACE
+ labels:
+ app: $CI_ENVIRONMENT_SLUG
+ sha: "$CI_BUILD_REF"
+spec:
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ name: $CI_ENVIRONMENT_SLUG
+ app: $CI_ENVIRONMENT_SLUG
+ spec:
+ containers:
+ - name: app
+ image: $GITLAB_REVIEW_APP_IMAGE
+ imagePullPolicy: Always
+ resources:
+ requests:
+ memory: "2048Mi"
+ cpu: "1"
+ limits:
+ memory: "4096Mi"
+ cpu: "4"
+ env:
+ - name: CI_PIPELINE_ID
+ value: "$CI_PIPELINE_ID"
+ - name: CI_BUILD_ID
+ value: "$CI_BUILD_ID"
+ - name: CI_CHECKOUT_SHA
+ value: "$CI_BUILD_REF"
+ ports:
+ - name: web
+ containerPort: 5000
+ livenessProbe:
+ httpGet:
+ path: /help
+ port: 5000
+ initialDelaySeconds: 5
+ timeoutSeconds: 3
+ failureThreshold: 200
+ readinessProbe:
+ httpGet:
+ path: /help
+ port: 5000
+ initialDelaySeconds: 5
+ timeoutSeconds: 3
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: $CI_ENVIRONMENT_SLUG
+ namespace: $KUBE_NAMESPACE
+ labels:
+ app: $CI_ENVIRONMENT_SLUG
+spec:
+ ports:
+ - name: web
+ port: 5000
+ targetPort: web
+ selector:
+ name: $CI_ENVIRONMENT_SLUG
+---
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ name: $CI_ENVIRONMENT_SLUG
+ namespace: $KUBE_NAMESPACE
+ labels:
+ app: $CI_ENVIRONMENT_SLUG
+ annotations:
+ kubernetes.io/tls-acme: "true"
+ kubernetes.io/ingress.class: "nginx"
+spec:
+ tls:
+ - hosts:
+ - $CI_ENVIRONMENT_HOSTNAME
+ secretName: ${CI_ENVIRONMENT_SLUG}-tls
+ rules:
+ - host: $CI_ENVIRONMENT_HOSTNAME
+ http:
+ paths:
+ - path: /
+ backend:
+ serviceName: $CI_ENVIRONMENT_SLUG
+ servicePort: 5000
+EOF
+
+echo "Deployment of your review app started."
+echo "Application should be accessible at: ${CI_ENVIRONMENT_URL} within a couple of minutes"
+echo ""