stackage-server/.gitlab-ci.yml
Michael Snoyman 25dcc40e70
Drop Helm
2020-03-23 13:04:33 +02:00

68 lines
2.7 KiB
YAML

image: registry.gitlab.fpcomplete.com/fpco/default-build-image:7293
cache:
key: "$CI_BUILD_NAME"
paths:
- .stack-work/
- .stack-root/
- static/combined/
stages:
- build
- deploy
variables:
STACK_ROOT: "${CI_PROJECT_DIR}/.stack-root"
DEPLOYMENT_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_BUILD_REF_SLUG}_${CI_PIPELINE_ID}"
DEPLOYMENT_NAME: "stackage-server-prod"
HOOGLE_DEPLOYMENT_NAME: "stackage-server-hoogle-prod"
CRON_DEPLOYMENT_NAME: "stackage-server-cron-prod"
DEPLOYMENT_APP: "stackage-server-prod"
CRON_DEPLOYMENT_APP: "stackage-server-cron-prod"
HOOGLE_DEPLOYMENT_APP: "stackage-server-hoogle-prod"
KUBECONFIG: /etc/deploy/kubeconfig.yaml
build:
stage: build
script:
# Clear *_TOKEN variables during code build so that compile-time code can't access them
- apt-get update && apt-get install -y --no-install-recommends libpq-dev git rsync
- CI_BUILD_TOKEN="" KUBECONFIG_YAML="" KUBE_TOKEN="" PROD_KUBE_TOKEN="" PROD_DOCKER_PASSWORD="" etc/scripts/stage_docker.sh --install-ghc --test
- docker build -t "${DEPLOYMENT_IMAGE}" etc/docker
- docker login -u gitlab-ci-token -p "${CI_BUILD_TOKEN}" "${CI_REGISTRY}"
- docker push "${DEPLOYMENT_IMAGE}"
- |
if [[ "$CI_BUILD_REF_NAME" == "master" ]]; then
docker tag "${DEPLOYMENT_IMAGE}" "${CI_REGISTRY_IMAGE}:latest"
docker push "${CI_REGISTRY_IMAGE}:latest"
fi
if [[ "$CI_BUILD_REF_NAME" == "ci-cron" ]]; then
docker tag "${DEPLOYMENT_IMAGE}" "${CI_REGISTRY_IMAGE}:ci-cron"
docker push "${CI_REGISTRY_IMAGE}:ci-cron"
fi
deploy_prod:
stage: deploy
only:
- master
# when: manual
environment:
name: production
url: https://www.stackage.org/
variables:
CRON_DEPLOYMENT_NAME: "stackage-server-cron-prod"
DEPLOYMENT_NAME: "stackage-server-prod"
HOOGLE_DEPLOYMENT_NAME: "stackage-server-hoogle-prod"
KUBE_NAMESPACE: "${PROD_KUBE_NAMESPACE}"
PROD_DEPLOYMENT_IMAGE: "fpco/stackage-server-prod:${CI_BUILD_REF_SLUG}_${CI_PIPELINE_ID}"
script:
- mkdir -p /etc/deploy
- echo "${KUBECONFIG_YAML}" > /etc/deploy/kubeconfig.enc
- base64 -d </etc/deploy/kubeconfig.enc > ${KUBECONFIG}
- kubectl set image "deployment/stackage-server-prod" stackage-server="$DEPLOYMENT_IMAGE"
- kubectl set image "deployment/stackage-server-cron-prod" stackage-server-cron="$DEPLOYMENT_IMAGE"
- kubectl set image "deployment/stackage-server-hoogle-prod" stackage-server-hoogle="$DEPLOYMENT_IMAGE"
- kubectl rollout status "deployment/stackage-server-prod"
- kubectl rollout status "deployment/stackage-server-hoogle-prod"
- kubectl rollout status "deployment/stackage-server-cron-prod"