.auto-deploy: image: "registry.gitlab.com/gitlab-org/cluster-integration/auto-deploy-image:v0.8.3" review: extends: .auto-deploy stage: review script: - auto-deploy check_kube_domain - auto-deploy download_chart - auto-deploy ensure_namespace - auto-deploy initialize_tiller - auto-deploy create_secret - auto-deploy deploy - auto-deploy persist_environment_url environment: name: review/$CI_COMMIT_REF_NAME url: http://$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG.$KUBE_INGRESS_BASE_DOMAIN on_stop: stop_review artifacts: paths: [environment_url.txt] only: refs: - branches - tags kubernetes: active except: refs: - master variables: - $REVIEW_DISABLED stop_review: extends: .auto-deploy stage: cleanup variables: GIT_STRATEGY: none script: - auto-deploy initialize_tiller - auto-deploy delete environment: name: review/$CI_COMMIT_REF_NAME action: stop when: manual allow_failure: true only: refs: - branches - tags kubernetes: active except: refs: - master variables: - $REVIEW_DISABLED # Staging deploys are disabled by default since # continuous deployment to production is enabled by default # If you prefer to automatically deploy to staging and # only manually promote to production, enable this job by setting # STAGING_ENABLED. staging: extends: .auto-deploy stage: staging script: - auto-deploy check_kube_domain - auto-deploy download_chart - auto-deploy ensure_namespace - auto-deploy initialize_tiller - auto-deploy create_secret - auto-deploy deploy environment: name: staging url: http://$CI_PROJECT_PATH_SLUG-staging.$KUBE_INGRESS_BASE_DOMAIN only: refs: - master kubernetes: active variables: - $STAGING_ENABLED # Canaries are disabled by default, but if you want them, # and know what the downsides are, you can enable this by setting # CANARY_ENABLED. canary: extends: .auto-deploy stage: canary script: - auto-deploy check_kube_domain - auto-deploy download_chart - auto-deploy ensure_namespace - auto-deploy initialize_tiller - auto-deploy create_secret - auto-deploy deploy canary environment: name: production url: http://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN when: manual only: refs: - master kubernetes: active variables: - $CANARY_ENABLED .production: &production_template extends: .auto-deploy stage: production script: - auto-deploy check_kube_domain - auto-deploy download_chart - auto-deploy ensure_namespace - auto-deploy initialize_tiller - auto-deploy create_secret - auto-deploy deploy - auto-deploy delete canary - auto-deploy delete rollout - auto-deploy persist_environment_url environment: name: production url: http://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN artifacts: paths: [environment_url.txt] production: <<: *production_template only: refs: - master kubernetes: active except: variables: - $STAGING_ENABLED - $CANARY_ENABLED - $INCREMENTAL_ROLLOUT_ENABLED - $INCREMENTAL_ROLLOUT_MODE production_manual: <<: *production_template when: manual allow_failure: false only: refs: - master kubernetes: active variables: - $STAGING_ENABLED - $CANARY_ENABLED except: variables: - $INCREMENTAL_ROLLOUT_ENABLED - $INCREMENTAL_ROLLOUT_MODE # This job implements incremental rollout on for every push to `master`. .rollout: &rollout_template extends: .auto-deploy script: - auto-deploy check_kube_domain - auto-deploy download_chart - auto-deploy ensure_namespace - auto-deploy initialize_tiller - auto-deploy create_secret - auto-deploy deploy rollout $ROLLOUT_PERCENTAGE - auto-deploy scale stable $((100-ROLLOUT_PERCENTAGE)) - auto-deploy delete canary - auto-deploy persist_environment_url environment: name: production url: http://$CI_PROJECT_PATH_SLUG.$KUBE_INGRESS_BASE_DOMAIN artifacts: paths: [environment_url.txt] .manual_rollout_template: &manual_rollout_template <<: *rollout_template stage: production when: manual # This selectors are backward compatible mode with $INCREMENTAL_ROLLOUT_ENABLED (before 11.4) only: refs: - master kubernetes: active variables: - $INCREMENTAL_ROLLOUT_MODE == "manual" - $INCREMENTAL_ROLLOUT_ENABLED except: variables: - $INCREMENTAL_ROLLOUT_MODE == "timed" .timed_rollout_template: &timed_rollout_template <<: *rollout_template when: delayed start_in: 5 minutes only: refs: - master kubernetes: active variables: - $INCREMENTAL_ROLLOUT_MODE == "timed" timed rollout 10%: <<: *timed_rollout_template stage: incremental rollout 10% variables: ROLLOUT_PERCENTAGE: 10 timed rollout 25%: <<: *timed_rollout_template stage: incremental rollout 25% variables: ROLLOUT_PERCENTAGE: 25 timed rollout 50%: <<: *timed_rollout_template stage: incremental rollout 50% variables: ROLLOUT_PERCENTAGE: 50 timed rollout 100%: <<: *timed_rollout_template <<: *production_template stage: incremental rollout 100% variables: ROLLOUT_PERCENTAGE: 100 rollout 10%: <<: *manual_rollout_template variables: ROLLOUT_PERCENTAGE: 10 rollout 25%: <<: *manual_rollout_template variables: ROLLOUT_PERCENTAGE: 25 rollout 50%: <<: *manual_rollout_template variables: ROLLOUT_PERCENTAGE: 50 rollout 100%: <<: *manual_rollout_template <<: *production_template allow_failure: false