ghost-portal/.gitlab-ci.yml
2019-07-30 13:04:48 +02:00

160 lines
3.8 KiB
YAML

image: roffe/kubectl:latest
variables:
CI_REGISTRY: parity.azurecr.io
CI_REGISTRY_USER: parity
AUTO_DEVOPS_DOMAIN: poc-3.polkadot.io
.kubernetes: &kubernetes
tags:
- kubernetes
stages:
- dockerize
- test
- review
- staging
- production
- cleanup
before_script:
- export DOCKER_IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH_SLUG
- export DOCKER_TAG=$CI_COMMIT_REF_SLUG-$VERSION
- export DOCKER_IMAGE_FULL_NAME=$DOCKER_IMAGE:$DOCKER_TAG
dockerize:
stage: dockerize
environment:
name: infrastructure_build
tags:
- kubernetes-parity-build
image: docker:git
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://localhost:2375
script:
- echo $DOCKER_IMAGE
- echo $DOCKER_TAG
- echo $DOCKER_IMAGE_FULL_NAME
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
- docker build -t "$DOCKER_IMAGE_FULL_NAME" .
- docker push "$DOCKER_IMAGE_FULL_NAME"
only:
- master
review:
stage: review
<<: *kubernetes
script:
- setup_kubernetes
- deploy
environment:
name: review/$CI_COMMIT_REF_NAME
url: https://$CI_ENVIRONMENT_SLUG.$AUTO_DEVOPS_DOMAIN
on_stop: stop_review
only:
refs:
- branches
kubernetes: active
except:
- master
stop_review:
stage: cleanup
<<: *kubernetes
variables:
GIT_STRATEGY: none
script:
- setup_kubernetes
- delete
environment:
name: review/$CI_COMMIT_REF_NAME
action: stop
when: manual
allow_failure: true
only:
refs:
- branches
kubernetes: active
except:
- master
staging:
stage: staging
<<: *kubernetes
script:
- setup_kubernetes
- deploy
environment:
name: staging
url: https://staging.$AUTO_DEVOPS_DOMAIN
only:
refs:
- master
kubernetes: active
production:
stage: production
<<: *kubernetes
script:
- setup_kubernetes
- deploy
environment:
name: production
url: https://$AUTO_DEVOPS_DOMAIN
when: manual
only:
refs:
- master
kubernetes: active
# ---------------------------------------------------------------------------
.auto_devops: &auto_devops |
# Auto DevOps variables and functions
[[ "$TRACE" ]] && set -x
export DOCKER_IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH_SLUG
export DOCKER_TAG=$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHA
export DOCKER_IMAGE_FULL_NAME=$DOCKER_IMAGE:$DOCKER_TAG
export AUTODEVOPS_HOST=$(echo $CI_ENVIRONMENT_URL | awk -F/ '{print $3}')
function build() {
if [[ -n "$CI_REGISTRY_USER" ]]; then
echo "Logging to GitLab Container Registry with CI credentials..."
docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
echo ""
fi
echo "Building Dockerfile-based application..."
docker build -t "$DOCKER_IMAGE_FULL_NAME" .
echo "Pushing to GitLab Container Registry..."
docker push "$DOCKER_IMAGE_FULL_NAME"
echo ""
}
function setup_kubernetes() {
kubectl describe namespace "$KUBE_NAMESPACE" || kubectl create namespace "$KUBE_NAMESPACE"
kubectl create secret -n "$KUBE_NAMESPACE" \
docker-registry gitlab-registry \
--docker-server="$CI_REGISTRY" \
--docker-username="$CI_REGISTRY_USER" \
--docker-password="$CI_REGISTRY_PASSWORD" \
--docker-email="$GITLAB_USER_EMAIL" \
-o yaml --dry-run | kubectl replace -n "$KUBE_NAMESPACE" --force -f -
}
function deploy() {
cat ./deployment.template.yml | envsubst | kubectl apply -n "$KUBE_NAMESPACE" -f -
}
function delete() {
kubectl -n "$KUBE_NAMESPACE" delete "deploy/$CI_ENVIRONMENT_SLUG-backend"
kubectl -n "$KUBE_NAMESPACE" delete "svc/$CI_ENVIRONMENT_SLUG-service"
kubectl -n "$KUBE_NAMESPACE" delete "ing/$CI_ENVIRONMENT_SLUG-ingress"
}
before_script:
- *auto_devops