diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2017-01-27 15:01:29 +0100 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2017-01-27 15:24:27 +0100 |
commit | b17bbaa072573d1290f3b59fddaf04ba5daa7ead (patch) | |
tree | dbc2be104e90c282aaac4175f80b1b784ea81957 | |
parent | 637894de8868b05499a275e1685621473addef58 (diff) | |
download | gitlab-ce-enable-review-apps.tar.gz |
Add review apps supportenable-review-apps
-rw-r--r-- | .gitlab-ci.yml | 38 | ||||
-rwxr-xr-x | scripts/deploy-review | 122 |
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 "" |