Commit 5651306a authored by Pierre Smeyers's avatar Pierre Smeyers
Browse files

Merge branch 'feat/env-url-improvement' into 'master'

Simplify environments url management in deployment templates

See merge request to-be-continuous/kubernetes!45
parents 62bfa866 0e97232a
Loading
Loading
Loading
Loading
+253 −197

File changed.

Preview size limit exceeded, changes collapsed.

+15 −15
Original line number Diff line number Diff line
@@ -35,6 +35,11 @@
      "default": "$CI_PROJECT_NAME",
      "advanced": true
    },
    {
      "name": "K8S_ENVIRONMENT_URL",
      "type": "url",
      "description": "The default environments url _(only define for static environment URLs declaration)_\n\n_supports late variable expansion (ex: `https://%{environment_name}.k8s.acme.com`)_"
    },
    {
      "name": "K8S_SCRIPTS_DIR",
      "description": "directory where Kubernetes scripts (templates, hook scripts) are located",
@@ -83,15 +88,10 @@
          "advanced": true
        },
        {
          "name": "K8S_REVIEW_ENVIRONMENT_SCHEME",
          "description": "The review environment protocol scheme",
          "default": "https",
          "mandatory": true
        },
        {
          "name": "K8S_REVIEW_ENVIRONMENT_DOMAIN",
          "description": "The review environment domain (ex: `noprod-kubernetes.domain.com`).\n\nBy default review `environment.url` will be built as `${K8S_REVIEW_ENVIRONMENT_SCHEME}://${$CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}.${K8S_REVIEW_ENVIRONMENT_DOMAIN}`",
          "mandatory": true
          "name": "K8S_REVIEW_ENVIRONMENT_URL",
          "type": "url",
          "description": "The review environments url _(only define for static environment URLs declaration and if different from default)_",
          "advanced": true
        },
        {
          "name": "K8S_REVIEW_KUBE_CONFIG",
@@ -134,8 +134,8 @@
        {
          "name": "K8S_INTEG_ENVIRONMENT_URL",
          "type": "url",
          "description": "The integration environment url including scheme (ex: `https://my-application-integration.noprod-kubernetes.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.",
          "mandatory": true
          "description": "The integration environment url _(only define for static environment URLs declaration and if different from default)_",
          "advanced": true
        },
        {
          "name": "K8S_INTEG_KUBE_CONFIG",
@@ -178,8 +178,8 @@
        {
          "name": "K8S_STAGING_ENVIRONMENT_URL",
          "type": "url",
          "description": "The staging environment url including scheme (ex: `https://my-application-staging.noprod-kubernetes.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.",
          "mandatory": true
          "description": "The staging environment url _(only define for static environment URLs declaration and if different from default)_",
          "advanced": true
        },
        {
          "name": "K8S_STAGING_KUBE_CONFIG",
@@ -222,8 +222,8 @@
        {
          "name": "K8S_PROD_ENVIRONMENT_URL",
          "type": "url",
          "description": "The production environment url including scheme (ex: `https://my-application.kubernetes.domain.com`).\n\nDo not use variable inside variable definition as it will result in a two level cascade variable and gitlab does not allow that.",
          "mandatory": true
          "description": "The production environment url _(only define for static environment URLs declaration and if different from default)_",
          "advanced": true
        },
        {
          "name": "AUTODEPLOY_TO_PROD",
+99 −89
Original line number Diff line number Diff line
@@ -267,7 +267,7 @@ stages:
  }

  function awkenvsubst() {
    awk '!/# *nosubst/{while(match($0,"[$]{[^}]*}")) {var=substr($0,RSTART+2,RLENGTH -3);val=ENVIRON[var];gsub(/["\\]/,"\\\\&", val);gsub("\n", "\\n", val);gsub("\r", "\\r", val);gsub("[$]{"var"}",val)}}1'
    awk '!/# *nosubst/{while(match($0,"[$%]{[^}]*}")) {g0=substr($0,RSTART,RLENGTH); val=ENVIRON[substr(g0,3,RLENGTH-3)]; gsub(/["\\]/,"\\\\&",val); gsub("\n","\\n",val);gsub("\r","\\r",val); gsub(g0,val)}}1'
  }

  function exec_hook() {
@@ -281,7 +281,7 @@ stages:
    fi
  }
  function login() {
    env=$1
    environment_type=$1
    url=$2
    cacert=$3
    token=$4
@@ -295,7 +295,7 @@ stages:
    elif [ -n "$KUBECONFIG" ]; then
      log_info "--- \\e[32mlogin\\e[0m using kubeconfig file provided by GitLab"
    else
      log_info "--- \\e[32mlogin\\e[0m using exploded kubeconfig parameters (env: \\e[33;1m${env}\\e[0m, url: \\e[33;1m${url}\\e[0m, namespace: \\e[33;1m${namespace}\\e[0m)"
      log_info "--- \\e[32mlogin\\e[0m using exploded kubeconfig parameters (env: \\e[33;1m${environment_type}\\e[0m, url: \\e[33;1m${url}\\e[0m, namespace: \\e[33;1m${namespace}\\e[0m)"

      assert_defined "${url}" "Missing required Kubernetes URL. Provide a kubeconfig file or \$K8S_*_URL"
      assert_defined "${token}" "Missing required Kubernetes Token. Provide a kubeconfig file or \$K8S_*_TOKEN"
@@ -333,10 +333,10 @@ stages:

    if [[ "${K8S_KUSTOMIZE_ENABLED}" == "true" ]]
    then
      kustofile=$(ls -1 "$K8S_SCRIPTS_DIR/${env}/kustomization.yaml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/kustomization.yaml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/${env}/kustomization.yml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/kustomization.yml" 2>/dev/null || echo "")
      kustofile=$(ls -1 "$K8S_SCRIPTS_DIR/${environment_type}/kustomization.yaml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/kustomization.yaml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/${environment_type}/kustomization.yml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/kustomization.yml" 2>/dev/null || echo "")
      if [[ -z "$kustofile" ]]
      then
        log_error "--- kustomize enabled but nor ${env}/kustomization.yaml neither kustomization.yaml was found"
        log_error "--- kustomize enabled but nor ${environment_type}/kustomization.yaml neither kustomization.yaml was found"
        exit 1
      fi
      deploymentdir=$(dirname "$kustofile")
@@ -347,7 +347,7 @@ stages:
    else

      # find deployment file
      deploymentfile=$(ls -1 "$K8S_SCRIPTS_DIR/deployment-${env}.yml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/deployment.yml" 2>/dev/null || echo "")
      deploymentfile=$(ls -1 "$K8S_SCRIPTS_DIR/deployment-${environment_type}.yml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/deployment.yml" 2>/dev/null || echo "")
      if [[ -z "$deploymentfile" ]]
      then
        log_error "--- deployment file not found"
@@ -364,30 +364,38 @@ stages:
  }

  function deploy() {
    export env=$1
    export environment_type=$1
    export environment_name=$2
    environment_url=$3
    # also export environment_name in SCREAMING_SNAKE_CASE format (may be useful with Kubernetes env variables)
    environment_name_ssc=$(to_ssc "$2")
    export environment_name_ssc

    # for backward compatibility
    export stage=$1
    export appname=$2
    # also export appname in SCREAMING_SNAKE_CASE format (may be useful with Kubernetes env variables)
    appname_ssc=$(to_ssc "$2")
    export appname_ssc
    # extract hostname from $CI_ENVIRONMENT_URL
    hostname=$(echo "$CI_ENVIRONMENT_URL" | awk -F[/:] '{print $4}')
    export stage=$environment_type
    export env=$environment_type
    export appname=$environment_name
    export appname_ssc=$environment_name_ssc

    # variables expansion in $environment_url
    environment_url=$(echo "$environment_url" | awkenvsubst)
    export environment_url
    # extract hostname from $environment_url
    hostname=$(echo "$environment_url" | awk -F[/:] '{print $4}')
    export hostname

    # for backward compatibility
    export K8S_APP_NAME=$appname
    export K8S_ENV=$env
    log_info "--- \\e[32mdeploy\\e[0m"
    log_info "--- \$environment_type: \\e[33;1m${environment_type}\\e[0m"
    log_info "--- \$environment_name: \\e[33;1m${environment_name}\\e[0m"
    log_info "--- \$environment_name_ssc: \\e[33;1m${environment_name_ssc}\\e[0m"
    log_info "--- \$hostname: \\e[33;1m${hostname}\\e[0m"

    log_info "--- \\e[32mdeploy\\e[0m (env: \\e[33;1m${env}\\e[0m)"
    log_info "--- looking for Kubernetes scripts in directory: \\e[33;1m${K8S_SCRIPTS_DIR}\\e[0m"
    log_info "--- appname: \\e[33;1m${appname}\\e[0m"
    log_info "--- appname_ssc: \\e[33;1m${appname_ssc}\\e[0m"
    log_info "--- env: \\e[33;1m${env}\\e[0m"
    log_info "--- hostname: \\e[33;1m${hostname}\\e[0m"
    # unset any upstream deployment env & artifacts
    rm -f kubernetes.env
    rm -f environment_url.txt

    # maybe execute deploy script
    deployscript=$(ls -1 "$K8S_SCRIPTS_DIR/k8s-deploy-${env}.sh" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/k8s-deploy.sh" 2>/dev/null || echo "")
    deployscript=$(ls -1 "$K8S_SCRIPTS_DIR/k8s-deploy-${environment_type}.sh" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/k8s-deploy.sh" 2>/dev/null || echo "")
    if [[ -f "$deployscript" ]]
    then
      log_info "--- deploy script (\\e[33;1m${deployscript}\\e[0m) found: execute"
@@ -417,8 +425,15 @@ stages:
    fi

    # persist environment url
    echo "$CI_ENVIRONMENT_URL" > environment_url.txt
    echo -e "environment_type=$env\\nenvironment_name=$appname\\nenvironment_url=$CI_ENVIRONMENT_URL" > kubernetes.env
    if [[ -f environment_url.txt ]]
    then
      environment_url=$(cat environment_url.txt)
      export environment_url
      log_info "--- dynamic environment url found: (\\e[33;1m$environment_url\\e[0m)"
    else
      echo "$environment_url" > environment_url.txt
    fi
    echo -e "environment_type=$environment_type\\nenvironment_name=$environment_name\\nenvironment_url=$environment_url" > kubernetes.env

    # maybe execute readiness check script
    readycheck="$K8S_SCRIPTS_DIR/k8s-readiness-check.sh"
@@ -431,27 +446,31 @@ stages:
  }

  function rollback() {
    export env=$1
    # for backward compatibility
    export stage=$1
    export appname=$2
    # also export appname in SCREAMING_SNAKE_CASE format (may be useful with Kubernetes env variables)
    appname_ssc=$(to_ssc "$2")
    export appname_ssc
    # extract hostname from $CI_ENVIRONMENT_URL
    hostname=$(echo "$CI_ENVIRONMENT_URL" | awk -F[/:] '{print $4}')
    export hostname
    export environment_type=$1
    export environment_name=$2
    environment_url=$3
    # also export environment_name in SCREAMING_SNAKE_CASE format (may be useful with Kubernetes env variables)
    environment_name_ssc=$(to_ssc "$2")
    export environment_name_ssc

    # for backward compatibility
    export K8S_APP_NAME=$appname
    export K8S_ENV=$env
    export stage=$environment_type
    export env=$environment_type
    export appname=$environment_name
    export appname_ssc=$environment_name_ssc

    # variables expansion in $environment_url
    environment_url=$(echo "$environment_url" | awkenvsubst)
    export environment_url
    # extract hostname from $environment_url
    hostname=$(echo "$environment_url" | awk -F[/:] '{print $4}')
    export hostname

    log_info "--- \\e[32mrollback\\e[0m (env: \\e[33;1m${env}\\e[0m)"
    log_info "--- looking for Kubernetes scripts in directory: \\e[33;1m${K8S_SCRIPTS_DIR}\\e[0m)"
    log_info "--- appname: \\e[33;1m${appname}\\e[0m"
    log_info "--- appname_ssc: \\e[33;1m${appname_ssc}\\e[0m"
    log_info "--- env: \\e[33;1m${env}\\e[0m"
    log_info "--- hostname: \\e[33;1m${hostname}\\e[0m"
    log_info "--- \\e[32mrollback\\e[0m"
    log_info "--- \$environment_type: \\e[33;1m${environment_type}\\e[0m"
    log_info "--- \$environment_name: \\e[33;1m${environment_name}\\e[0m"
    log_info "--- \$environment_name_ssc: \\e[33;1m${environment_name_ssc}\\e[0m"
    log_info "--- \$hostname: \\e[33;1m${hostname}\\e[0m"

    # maybe execute pre cleanup script
    prescript="$K8S_SCRIPTS_DIR/k8s-pre-rollback.sh"
@@ -465,7 +484,7 @@ stages:
    # rollback app
    log_info "--- \\e[32mkubectl rollout undo\\e[0m"

    kubectl ${TRACE+-v=5} rollout undo deployment "$appname-$env"
    kubectl ${TRACE+-v=5} rollout undo deployment "$environment_name-$environment_type"

    # maybe execute post cleanup script
    postscript="$K8S_SCRIPTS_DIR/k8s-post-rollback.sh"
@@ -478,25 +497,25 @@ stages:
  }

  function cleanup() {
    export env=$1
    # for backward compatibility
    export stage=$1
    export appname=$2
    # also export appname in SCREAMING_SNAKE_CASE format (may be useful with Kubernetes env variables)
    appname_ssc=$(to_ssc "$2")
    export appname_ssc
    export environment_type=$1
    export environment_name=$2
    # also export environment_name in SCREAMING_SNAKE_CASE format (may be useful with Kubernetes env variables)
    environment_name_ssc=$(to_ssc "$2")
    export environment_name_ssc

    # for backward compatibility
    export K8S_APP_NAME=$appname
    export K8S_ENV=$env
    export stage=$environment_type
    export env=$environment_type
    export appname=$environment_name
    export appname_ssc=$environment_name_ssc

    log_info "--- \\e[32mcleanup\\e[0m (env: ${env}, appname: ${appname})"
    log_info "--- appname: \\e[33;1m${appname}\\e[0m"
    log_info "--- appname_ssc: \\e[33;1m${appname_ssc}\\e[0m"
    log_info "--- env: \\e[33;1m${env}\\e[0m"
    log_info "--- \\e[32mcleanup\\e[0m"
    log_info "--- \$environment_type: \\e[33;1m${environment_type}\\e[0m"
    log_info "--- \$environment_name: \\e[33;1m${environment_name}\\e[0m"
    log_info "--- \$environment_name_ssc: \\e[33;1m${environment_name_ssc}\\e[0m"

    # maybe execute cleanup script
    cleanupscript=$(ls -1 "$K8S_SCRIPTS_DIR/k8s-cleanup-${env}.sh" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/k8s-cleanup.sh" 2>/dev/null || echo "")
    cleanupscript=$(ls -1 "$K8S_SCRIPTS_DIR/k8s-cleanup-${environment_type}.sh" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/k8s-cleanup.sh" 2>/dev/null || echo "")
    if [[ -f "$cleanupscript" ]]
    then
      log_info "--- cleanup script (\\e[33;1m${cleanupscript}\\e[0m) found: execute"
@@ -530,13 +549,13 @@ stages:
  }

  function score() {
    export env=$1
    export environment_type=$1
    if [[ "$K8S_KUSTOMIZE_ENABLED" == "true" ]]
    then
      kustofile=$(ls -1 "$K8S_SCRIPTS_DIR/${env}/kustomization.yaml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/kustomization.yaml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/${env}/kustomization.yml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/kustomization.yml" 2>/dev/null || echo "")
      kustofile=$(ls -1 "$K8S_SCRIPTS_DIR/${environment_type}/kustomization.yaml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/kustomization.yaml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/${environment_type}/kustomization.yml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/kustomization.yml" 2>/dev/null || echo "")
      if [[ -z "$kustofile" ]]
      then
        log_error "--- kustomize enabled but nor ${env}/kustomization.yaml neither kustomization.yaml was found"
        log_error "--- kustomize enabled but nor ${environment_type}/kustomization.yaml neither kustomization.yaml was found"
        exit 1
      fi
      deploymentdir=$(dirname "$kustofile")
@@ -545,7 +564,7 @@ stages:
      kustomize build "${deploymentdir}" | /usr/bin/kube-score score $K8S_SCORE_EXTRA_OPTS -
    else
      # find deployment file
      deploymentfile=$(ls -1 "$K8S_SCRIPTS_DIR/deployment-${env}.yml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/deployment.yml" 2>/dev/null || echo "")
      deploymentfile=$(ls -1 "$K8S_SCRIPTS_DIR/deployment-${environment_type}.yml" 2>/dev/null || ls -1 "$K8S_SCRIPTS_DIR/deployment.yml" 2>/dev/null || echo "")
      if [[ -z "$deploymentfile" ]]
      then
        log_error "--- deployment file not found"
@@ -595,7 +614,7 @@ stages:
# @arg ENV_TYPE       : environment type
# @arg ENV_APP_NAME   : env-specific application name
# @arg ENV_APP_SUFFIX : env-specific application suffix
# @arg ENV_URL        : env-specific Kubernetes API url
# @arg ENV_API_URL        : env-specific Kubernetes API url
# @arg ENV_SPACE      : env-specific Kubernetes namespace
# @arg ENV_TOKEN      : env-specific Kubernetes API token
# @arg ENV_CA_CERT    : env-specific Kubernetes CA certificate
@@ -609,9 +628,9 @@ stages:
    - *k8s-scripts
    - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}"
    - assert_defined "${ENV_SPACE:-$K8S_SPACE}" 'Missing required env $ENV_SPACE or $K8S_SPACE'
    - login "$ENV_TYPE" "${ENV_URL:-$K8S_URL}" "${ENV_CA_CERT:-$K8S_CA_CERT}" "${ENV_TOKEN:-$K8S_TOKEN}" "${ENV_SPACE:-$K8S_SPACE}" "${ENV_KUBE_CONFIG:-${K8S_DEFAULT_KUBE_CONFIG}}"
    - login "$ENV_TYPE" "${ENV_API_URL:-$K8S_URL}" "${ENV_CA_CERT:-$K8S_CA_CERT}" "${ENV_TOKEN:-$K8S_TOKEN}" "${ENV_SPACE:-$K8S_SPACE}" "${ENV_KUBE_CONFIG:-${K8S_DEFAULT_KUBE_CONFIG}}"
  script:
    - deploy "$ENV_TYPE" ${ENV_APP_NAME:-${K8S_BASE_APP_NAME}${ENV_APP_SUFFIX}}
    - deploy "$ENV_TYPE" "${ENV_APP_NAME:-${K8S_BASE_APP_NAME}${ENV_APP_SUFFIX}}" "${ENV_URL:-${K8S_ENVIRONMENT_URL:-$ENV_URL_LEGACY}}"
  artifacts:
    name: "$ENV_TYPE env url for $CI_PROJECT_NAME on $CI_COMMIT_REF_SLUG"
    when: always
@@ -620,6 +639,8 @@ stages:
      - environment_url.txt
    reports:
      dotenv: kubernetes.env
  environment:
    url: "$environment_url" # can be either static or dynamic

# Cleanup job prototype
# Can be extended for each deletable environment
@@ -627,7 +648,7 @@ stages:
# @arg ENV_TYPE       : environment type
# @arg ENV_APP_NAME   : env-specific application name
# @arg ENV_APP_SUFFIX : env-specific application suffix
# @arg ENV_URL        : env-specific Kubernetes API url
# @arg ENV_API_URL        : env-specific Kubernetes API url
# @arg ENV_SPACE      : env-specific Kubernetes namespace
# @arg ENV_TOKEN      : env-specific Kubernetes API token
# @arg ENV_CA_CERT    : env-specific Kubernetes CA certificate
@@ -643,7 +664,7 @@ stages:
    - *k8s-scripts
    - install_ca_certs "${CUSTOM_CA_CERTS:-$DEFAULT_CA_CERTS}"
    - assert_defined "${ENV_SPACE:-$K8S_SPACE}" 'Missing required env $ENV_SPACE or $K8S_SPACE'
    - login "$ENV_TYPE" "${ENV_URL:-$K8S_URL}" "${ENV_CA_CERT:-$K8S_CA_CERT}" "${ENV_TOKEN:-$K8S_TOKEN}" "${ENV_SPACE:-$K8S_SPACE}" "${ENV_KUBE_CONFIG:-${K8S_DEFAULT_KUBE_CONFIG}}"
    - login "$ENV_TYPE" "${ENV_API_URL:-$K8S_URL}" "${ENV_CA_CERT:-$K8S_CA_CERT}" "${ENV_TOKEN:-$K8S_TOKEN}" "${ENV_SPACE:-$K8S_SPACE}" "${ENV_KUBE_CONFIG:-${K8S_DEFAULT_KUBE_CONFIG}}"
  script:
    - cleanup "$ENV_TYPE" ${ENV_APP_NAME:-${K8S_BASE_APP_NAME}${ENV_APP_SUFFIX}}
  environment:
@@ -653,9 +674,6 @@ k8s-score-review:
  extends: .k8s-score
  variables:
    ENV_TYPE: review
  environment:
    name: review/$CI_COMMIT_REF_NAME
    url: "${K8S_REVIEW_ENVIRONMENT_SCHEME}://${CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}.${K8S_REVIEW_ENVIRONMENT_DOMAIN}"
  rules:
    # exclude tags
    - if: $CI_COMMIT_TAG
@@ -676,14 +694,15 @@ k8s-review:
  variables:
    ENV_TYPE: review
    ENV_APP_NAME: "$K8S_REVIEW_APP_NAME"
    ENV_URL: "$K8S_REVIEW_URL"
    ENV_API_URL: "$K8S_REVIEW_URL"
    ENV_SPACE: "$K8S_REVIEW_SPACE"
    ENV_TOKEN: "$K8S_REVIEW_TOKEN"
    ENV_CA_CERT: "$K8S_REVIEW_CA_CERT"
    ENV_KUBE_CONFIG: "$K8S_REVIEW_KUBE_CONFIG"
    ENV_URL: "${K8S_REVIEW_ENVIRONMENT_URL}"
    ENV_URL_LEGACY: "${K8S_REVIEW_ENVIRONMENT_SCHEME}://${CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}.${K8S_REVIEW_ENVIRONMENT_DOMAIN}"
  environment:
    name: review/$CI_COMMIT_REF_NAME
    url: "${K8S_REVIEW_ENVIRONMENT_SCHEME}://${CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}.${K8S_REVIEW_ENVIRONMENT_DOMAIN}"
    on_stop: k8s-cleanup-review
  resource_group: review/$CI_COMMIT_REF_NAME
  rules:
@@ -699,7 +718,7 @@ k8s-cleanup-review:
  variables:
    ENV_TYPE: review
    ENV_APP_NAME: "$K8S_REVIEW_APP_NAME"
    ENV_URL: "$K8S_REVIEW_URL"
    ENV_API_URL: "$K8S_REVIEW_URL"
    ENV_SPACE: "$K8S_REVIEW_SPACE"
    ENV_TOKEN: "$K8S_REVIEW_TOKEN"
    ENV_CA_CERT: "$K8S_REVIEW_CA_CERT"
@@ -721,9 +740,6 @@ k8s-score-integration:
  extends: .k8s-score
  variables:
    ENV_TYPE: integration
  environment:
    name: integration
    url: "${K8S_INTEG_ENVIRONMENT_URL}"
  rules:
    # exclude tags
    - if: $CI_COMMIT_TAG
@@ -744,14 +760,14 @@ k8s-integration:
  variables:
    ENV_TYPE: integration
    ENV_APP_NAME: "$K8S_INTEG_APP_NAME"
    ENV_URL: "$K8S_INTEG_URL"
    ENV_API_URL: "$K8S_INTEG_URL"
    ENV_SPACE: "$K8S_INTEG_SPACE"
    ENV_TOKEN: "$K8S_INTEG_TOKEN"
    ENV_CA_CERT: "$K8S_INTEG_CA_CERT"
    ENV_KUBE_CONFIG: "$K8S_INTEG_KUBE_CONFIG"
    ENV_URL: "${K8S_INTEG_ENVIRONMENT_URL}"
  environment:
    name: integration
    url: "${K8S_INTEG_ENVIRONMENT_URL}"
  resource_group: integration
  rules:
    # only on integration branch(es), with $K8S_INTEG_SPACE set
@@ -768,9 +784,6 @@ k8s-score-staging:
  extends: .k8s-score
  variables:
    ENV_TYPE: staging
  environment:
    name: staging
    url: "${K8S_STAGING_ENVIRONMENT_URL}"
  rules:
    # exclude tags
    - if: $CI_COMMIT_TAG
@@ -791,14 +804,14 @@ k8s-staging:
  variables:
    ENV_TYPE: staging
    ENV_APP_NAME: "$K8S_STAGING_APP_NAME"
    ENV_URL: "$K8S_STAGING_URL"
    ENV_API_URL: "$K8S_STAGING_URL"
    ENV_SPACE: "$K8S_STAGING_SPACE"
    ENV_TOKEN: "$K8S_STAGING_TOKEN"
    ENV_CA_CERT: "$K8S_STAGING_CA_CERT"
    ENV_KUBE_CONFIG: "$K8S_STAGING_KUBE_CONFIG"
    ENV_URL: "${K8S_STAGING_ENVIRONMENT_URL}"
  environment:
    name: staging
    url: "${K8S_STAGING_ENVIRONMENT_URL}"
  resource_group: staging
  rules:
    # only on production branch(es), with $K8S_STAGING_SPACE set
@@ -808,9 +821,6 @@ k8s-score-production:
  extends: .k8s-score
  variables:
    ENV_TYPE: production
  environment:
    name: production
    url: "${K8S_PROD_ENVIRONMENT_URL}"
  rules:
    # exclude tags
    - if: $CI_COMMIT_TAG
@@ -834,14 +844,14 @@ k8s-production:
    ENV_TYPE: production
    ENV_APP_SUFFIX: "" # no suffix for prod
    ENV_APP_NAME: "$K8S_PROD_APP_NAME"
    ENV_URL: "$K8S_PROD_URL"
    ENV_API_URL: "$K8S_PROD_URL"
    ENV_SPACE: "$K8S_PROD_SPACE"
    ENV_TOKEN: "$K8S_PROD_TOKEN"
    ENV_CA_CERT: "$K8S_PROD_CA_CERT"
    ENV_KUBE_CONFIG: "$K8S_PROD_KUBE_CONFIG"
    ENV_URL: "${K8S_PROD_ENVIRONMENT_URL}"
  environment:
    name: production
    url: "${K8S_PROD_ENVIRONMENT_URL}"
  resource_group: production
  rules:
    # exclude non-production branches