Something went wrong on our end
-
Ole Langbehn authoredOle Langbehn authored
.gitlab-ci.yml 4.62 KiB
variables:
API_DOMAIN_PATH: "$CI_PROJECT_DIR/api_domain"
stages:
- "build"
- "deploy"
- "destroy"
default:
before_script:
- set -eu
# env -0 | sort -z | tr '\0' '\n': Sort env output alphabetically, keeping multiline variables intact
# egrep: Remove sensitive information from the output of env
#- env -0 | sort -z | tr '\0' '\n' | egrep -ve '^(DOCKER_AUTH_CONFIG|GOOGLE_APPLICATION_CREDENTIALS)=.*'
interruptible: true
tags:
- 1cpu-4gb # build on smaller machine
build_docker:
image: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/docker:28'
stage: "build"
services:
- name: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/docker:28-dind'
alias: 'docker'
variables:
# this could be fetched via terraform output ("gcr_location" in infra project), but then we would need an extra job for terraform
ARTIFACT_IMAGE: 'europe-north1-docker.pkg.dev/holi-shared/docker/holi-chat-server'
PUSH_GATEWAY_ARTIFACT_IMAGE: 'europe-north1-docker.pkg.dev/holi-shared/docker/holi-chat-push-gateway'
script:
- echo '===> building chat server image'
- docker pull "$ARTIFACT_IMAGE" || true # Allows us to use --cache-from, we need to tag with latest in the next command for this to work
- docker build --cache-from "$ARTIFACT_IMAGE" -t "$ARTIFACT_IMAGE":latest -t "$ARTIFACT_IMAGE":"$CI_COMMIT_SHA" -t "$ARTIFACT_IMAGE":"$CI_COMMIT_REF_SLUG" .
- docker push "$ARTIFACT_IMAGE":"$CI_COMMIT_SHA" # this is the tag that is used for deployment
- docker push "$ARTIFACT_IMAGE":"$CI_COMMIT_REF_SLUG" # just for easily knowing which is the last image for a branch
- docker push "$ARTIFACT_IMAGE":latest # for caching the build
- echo '===> building push gateway image'
- docker pull "$PUSH_GATEWAY_ARTIFACT_IMAGE" || true # Allows us to use --cache-from, we need to tag with latest in the next command for this to work
- docker build --cache-from "$PUSH_GATEWAY_ARTIFACT_IMAGE" -t "$PUSH_GATEWAY_ARTIFACT_IMAGE":latest -t "$PUSH_GATEWAY_ARTIFACT_IMAGE":"$CI_COMMIT_SHA" -t "$PUSH_GATEWAY_ARTIFACT_IMAGE":"$CI_COMMIT_REF_SLUG" -f push-gateway.Dockerfile .
- docker push "$PUSH_GATEWAY_ARTIFACT_IMAGE":"$CI_COMMIT_SHA" # this is the tag that is used for deployment
- docker push "$PUSH_GATEWAY_ARTIFACT_IMAGE":"$CI_COMMIT_REF_SLUG" # just for easily knowing which is the last image for a branch
- docker push "$PUSH_GATEWAY_ARTIFACT_IMAGE":latest # for caching the build
.deploy:
stage: "deploy"
image:
name: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/hashicorp/terraform:1.11.2'
# default entrypoint is terraform command, but we want to run shell scripts
entrypoint: ["/bin/sh", "-c"]
variables:
ENVIRONMENT_ID: $CI_ENVIRONMENT_SLUG
artifacts:
paths:
- "terraform/environments/crash.log" # optional, only available in case of a crash/panic
- "terraform/environments/terraform-*.log" # separate log for every step/command
- $API_DOMAIN_PATH
name: "${CI_JOB_NAME}_${CI_JOB_ID}"
#when: on_failure # can't do that for api base url, but can't define multiple artifacts
expire_in: 1 week
script:
- terraform/environments/scripts/create-or-update-env.sh "$ENVIRONMENT_ID" "$CI_COMMIT_SHA"
- echo "$(terraform/environments/scripts/get-output.sh api_domain)" > "$API_DOMAIN_PATH"
resource_group: $ENVIRONMENT_ID # never execute terraform in parallel on the same environment
interruptible: false
.smoketest:
stage: "deploy"
image: 'europe-north1-docker.pkg.dev/holi-shared/docker/holi-docker/holi-k6-builder'
script:
- API_DOMAIN=$(cat "$API_DOMAIN_PATH")
- terraform/environments/scripts/wait-for-ssl.sh "https://${API_DOMAIN}"