147 lines
3.3 KiB
YAML
147 lines
3.3 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
|
|
|
|
dockerize:
|
|
stage: dockerize
|
|
<<: *kubernetes
|
|
image: docker:git
|
|
services:
|
|
- docker:dind
|
|
variables:
|
|
DOCKER_DRIVER: overlay2
|
|
DOCKER_HOST: tcp://localhost:2375
|
|
script:
|
|
- build
|
|
only:
|
|
- branches
|
|
|
|
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
|