Loading .gitlab-ci.yml +4 −7 Original line number Diff line number Diff line Loading @@ -72,14 +72,13 @@ test-deploy-name: GIT_STRATEGY: none CI_ENVIRONMENT_SLUG: production script: - source /build/deploy-helpers.sh - name=$(deploy_name "stable") - name=$(auto-deploy deploy_name "stable") - | if [[ $name != "production" ]]; then echo "$name should equal 'production'" exit 1 fi - name=$(deploy_name "canary") - name=$(auto-deploy deploy_name "canary") - | if [[ $name != "production-canary" ]]; then echo "$name should equal 'production-canary'" Loading @@ -92,8 +91,7 @@ test-get-replicas: GIT_STRATEGY: none CI_ENVIRONMENT_SLUG: production script: - source /build/deploy-helpers.sh - replicas=$(get_replicas "stable" "100") - replicas=$(auto-deploy get_replicas "stable" "100") - | if [[ $replicas != 1 ]]; then echo "$replicas should equal 1" Loading Loading @@ -193,8 +191,7 @@ test-create-application-secret: script: - download_k3s - start_k3s - source /build/deploy-helpers.sh - create_application_secret "stable" - auto-deploy create_application_secret "stable" - kubectl get secrets -n $KUBE_NAMESPACE - kubectl get secrets production-secret -n $KUBE_NAMESPACE Loading src/bin/auto-deploy +86 −0 Original line number Diff line number Diff line Loading @@ -229,6 +229,89 @@ function delete() { kubectl delete secret --ignore-not-found -n "$KUBE_NAMESPACE" "$secret_name" } ## Helper functions ## # Extracts variables prefixed with K8S_SECRET_ # and creates a Kubernetes secret. # # e.g. If we have the following environment variables: # K8S_SECRET_A=value1 # K8S_SECRET_B=multi\ word\ value # # Then we will create a secret with the following key-value pairs: # data: # A: dmFsdWUxCg== # B: bXVsdGkgd29yZCB2YWx1ZQo= function create_application_secret() { track="${1-stable}" export APPLICATION_SECRET_NAME=$(application_secret_name "$track") env | sed -n "s/^K8S_SECRET_\(.*\)$/\1/p" > k8s_prefixed_variables kubectl create secret \ -n "$KUBE_NAMESPACE" generic "$APPLICATION_SECRET_NAME" \ --from-env-file k8s_prefixed_variables -o yaml --dry-run | kubectl replace -n "$KUBE_NAMESPACE" --force -f - export APPLICATION_SECRET_CHECKSUM=$(cat k8s_prefixed_variables | sha256sum | cut -d ' ' -f 1) rm k8s_prefixed_variables } function application_secret_name() { track="${1-stable}" name=$(deploy_name "$track") echo "${name}-secret" } function deploy_name() { name="$CI_ENVIRONMENT_SLUG" track="${1-stable}" if [[ "$track" != "stable" ]]; then name="$name-$track" fi echo $name } function get_replicas() { track="${1:-stable}" percentage="${2:-100}" env_track=$( echo $track | tr -s '[:lower:]' '[:upper:]' ) env_slug=$( echo ${CI_ENVIRONMENT_SLUG//-/_} | tr -s '[:lower:]' '[:upper:]' ) if [[ "$track" == "stable" ]] || [[ "$track" == "rollout" ]]; then # for stable track get number of replicas from `PRODUCTION_REPLICAS` eval new_replicas=\$${env_slug}_REPLICAS if [[ -z "$new_replicas" ]]; then new_replicas=$REPLICAS fi else # for all tracks get number of replicas from `CANARY_PRODUCTION_REPLICAS` eval new_replicas=\$${env_track}_${env_slug}_REPLICAS if [[ -z "$new_replicas" ]]; then eval new_replicas=\${env_track}_REPLICAS fi fi replicas="${new_replicas:-1}" replicas="$(($replicas * $percentage / 100))" # always return at least one replicas if [[ $replicas -gt 0 ]]; then echo "$replicas" else echo 1 fi } ## ## End Helper functions option=$1 case $option in Loading @@ -241,5 +324,8 @@ in deploy) deploy "${@:2}" ;; scale) scale "${@:2}" ;; delete) delete "${@:2}" ;; create_application_secret) create_application_secret "${@:2}" ;; deploy_name) deploy_name "${@:2}" ;; get_replicas) get_replicas "${@:2}" ;; *) exit 1 ;; esac src/deploy-helpers.shdeleted 100755 → 0 +0 −79 Original line number Diff line number Diff line #! /bin/sh ## Helper functions # Extracts variables prefixed with K8S_SECRET_ # and creates a Kubernetes secret. # # e.g. If we have the following environment variables: # K8S_SECRET_A=value1 # K8S_SECRET_B=multi\ word\ value # # Then we will create a secret with the following key-value pairs: # data: # A: dmFsdWUxCg== # B: bXVsdGkgd29yZCB2YWx1ZQo= function create_application_secret() { track="${1-stable}" export APPLICATION_SECRET_NAME=$(application_secret_name "$track") env | sed -n "s/^K8S_SECRET_\(.*\)$/\1/p" > k8s_prefixed_variables kubectl create secret \ -n "$KUBE_NAMESPACE" generic "$APPLICATION_SECRET_NAME" \ --from-env-file k8s_prefixed_variables -o yaml --dry-run | kubectl replace -n "$KUBE_NAMESPACE" --force -f - export APPLICATION_SECRET_CHECKSUM=$(cat k8s_prefixed_variables | sha256sum | cut -d ' ' -f 1) rm k8s_prefixed_variables } function application_secret_name() { track="${1-stable}" name=$(deploy_name "$track") echo "${name}-secret" } function deploy_name() { name="$CI_ENVIRONMENT_SLUG" track="${1-stable}" if [[ "$track" != "stable" ]]; then name="$name-$track" fi echo $name } function get_replicas() { track="${1:-stable}" percentage="${2:-100}" env_track=$( echo $track | tr -s '[:lower:]' '[:upper:]' ) env_slug=$( echo ${CI_ENVIRONMENT_SLUG//-/_} | tr -s '[:lower:]' '[:upper:]' ) if [[ "$track" == "stable" ]] || [[ "$track" == "rollout" ]]; then # for stable track get number of replicas from `PRODUCTION_REPLICAS` eval new_replicas=\$${env_slug}_REPLICAS if [[ -z "$new_replicas" ]]; then new_replicas=$REPLICAS fi else # for all tracks get number of replicas from `CANARY_PRODUCTION_REPLICAS` eval new_replicas=\$${env_track}_${env_slug}_REPLICAS if [[ -z "$new_replicas" ]]; then eval new_replicas=\${env_track}_REPLICAS fi fi replicas="${new_replicas:-1}" replicas="$(($replicas * $percentage / 100))" # always return at least one replicas if [[ $replicas -gt 0 ]]; then echo "$replicas" else echo 1 fi } Loading
.gitlab-ci.yml +4 −7 Original line number Diff line number Diff line Loading @@ -72,14 +72,13 @@ test-deploy-name: GIT_STRATEGY: none CI_ENVIRONMENT_SLUG: production script: - source /build/deploy-helpers.sh - name=$(deploy_name "stable") - name=$(auto-deploy deploy_name "stable") - | if [[ $name != "production" ]]; then echo "$name should equal 'production'" exit 1 fi - name=$(deploy_name "canary") - name=$(auto-deploy deploy_name "canary") - | if [[ $name != "production-canary" ]]; then echo "$name should equal 'production-canary'" Loading @@ -92,8 +91,7 @@ test-get-replicas: GIT_STRATEGY: none CI_ENVIRONMENT_SLUG: production script: - source /build/deploy-helpers.sh - replicas=$(get_replicas "stable" "100") - replicas=$(auto-deploy get_replicas "stable" "100") - | if [[ $replicas != 1 ]]; then echo "$replicas should equal 1" Loading Loading @@ -193,8 +191,7 @@ test-create-application-secret: script: - download_k3s - start_k3s - source /build/deploy-helpers.sh - create_application_secret "stable" - auto-deploy create_application_secret "stable" - kubectl get secrets -n $KUBE_NAMESPACE - kubectl get secrets production-secret -n $KUBE_NAMESPACE Loading
src/bin/auto-deploy +86 −0 Original line number Diff line number Diff line Loading @@ -229,6 +229,89 @@ function delete() { kubectl delete secret --ignore-not-found -n "$KUBE_NAMESPACE" "$secret_name" } ## Helper functions ## # Extracts variables prefixed with K8S_SECRET_ # and creates a Kubernetes secret. # # e.g. If we have the following environment variables: # K8S_SECRET_A=value1 # K8S_SECRET_B=multi\ word\ value # # Then we will create a secret with the following key-value pairs: # data: # A: dmFsdWUxCg== # B: bXVsdGkgd29yZCB2YWx1ZQo= function create_application_secret() { track="${1-stable}" export APPLICATION_SECRET_NAME=$(application_secret_name "$track") env | sed -n "s/^K8S_SECRET_\(.*\)$/\1/p" > k8s_prefixed_variables kubectl create secret \ -n "$KUBE_NAMESPACE" generic "$APPLICATION_SECRET_NAME" \ --from-env-file k8s_prefixed_variables -o yaml --dry-run | kubectl replace -n "$KUBE_NAMESPACE" --force -f - export APPLICATION_SECRET_CHECKSUM=$(cat k8s_prefixed_variables | sha256sum | cut -d ' ' -f 1) rm k8s_prefixed_variables } function application_secret_name() { track="${1-stable}" name=$(deploy_name "$track") echo "${name}-secret" } function deploy_name() { name="$CI_ENVIRONMENT_SLUG" track="${1-stable}" if [[ "$track" != "stable" ]]; then name="$name-$track" fi echo $name } function get_replicas() { track="${1:-stable}" percentage="${2:-100}" env_track=$( echo $track | tr -s '[:lower:]' '[:upper:]' ) env_slug=$( echo ${CI_ENVIRONMENT_SLUG//-/_} | tr -s '[:lower:]' '[:upper:]' ) if [[ "$track" == "stable" ]] || [[ "$track" == "rollout" ]]; then # for stable track get number of replicas from `PRODUCTION_REPLICAS` eval new_replicas=\$${env_slug}_REPLICAS if [[ -z "$new_replicas" ]]; then new_replicas=$REPLICAS fi else # for all tracks get number of replicas from `CANARY_PRODUCTION_REPLICAS` eval new_replicas=\$${env_track}_${env_slug}_REPLICAS if [[ -z "$new_replicas" ]]; then eval new_replicas=\${env_track}_REPLICAS fi fi replicas="${new_replicas:-1}" replicas="$(($replicas * $percentage / 100))" # always return at least one replicas if [[ $replicas -gt 0 ]]; then echo "$replicas" else echo 1 fi } ## ## End Helper functions option=$1 case $option in Loading @@ -241,5 +324,8 @@ in deploy) deploy "${@:2}" ;; scale) scale "${@:2}" ;; delete) delete "${@:2}" ;; create_application_secret) create_application_secret "${@:2}" ;; deploy_name) deploy_name "${@:2}" ;; get_replicas) get_replicas "${@:2}" ;; *) exit 1 ;; esac
src/deploy-helpers.shdeleted 100755 → 0 +0 −79 Original line number Diff line number Diff line #! /bin/sh ## Helper functions # Extracts variables prefixed with K8S_SECRET_ # and creates a Kubernetes secret. # # e.g. If we have the following environment variables: # K8S_SECRET_A=value1 # K8S_SECRET_B=multi\ word\ value # # Then we will create a secret with the following key-value pairs: # data: # A: dmFsdWUxCg== # B: bXVsdGkgd29yZCB2YWx1ZQo= function create_application_secret() { track="${1-stable}" export APPLICATION_SECRET_NAME=$(application_secret_name "$track") env | sed -n "s/^K8S_SECRET_\(.*\)$/\1/p" > k8s_prefixed_variables kubectl create secret \ -n "$KUBE_NAMESPACE" generic "$APPLICATION_SECRET_NAME" \ --from-env-file k8s_prefixed_variables -o yaml --dry-run | kubectl replace -n "$KUBE_NAMESPACE" --force -f - export APPLICATION_SECRET_CHECKSUM=$(cat k8s_prefixed_variables | sha256sum | cut -d ' ' -f 1) rm k8s_prefixed_variables } function application_secret_name() { track="${1-stable}" name=$(deploy_name "$track") echo "${name}-secret" } function deploy_name() { name="$CI_ENVIRONMENT_SLUG" track="${1-stable}" if [[ "$track" != "stable" ]]; then name="$name-$track" fi echo $name } function get_replicas() { track="${1:-stable}" percentage="${2:-100}" env_track=$( echo $track | tr -s '[:lower:]' '[:upper:]' ) env_slug=$( echo ${CI_ENVIRONMENT_SLUG//-/_} | tr -s '[:lower:]' '[:upper:]' ) if [[ "$track" == "stable" ]] || [[ "$track" == "rollout" ]]; then # for stable track get number of replicas from `PRODUCTION_REPLICAS` eval new_replicas=\$${env_slug}_REPLICAS if [[ -z "$new_replicas" ]]; then new_replicas=$REPLICAS fi else # for all tracks get number of replicas from `CANARY_PRODUCTION_REPLICAS` eval new_replicas=\$${env_track}_${env_slug}_REPLICAS if [[ -z "$new_replicas" ]]; then eval new_replicas=\${env_track}_REPLICAS fi fi replicas="${new_replicas:-1}" replicas="$(($replicas * $percentage / 100))" # always return at least one replicas if [[ $replicas -gt 0 ]]; then echo "$replicas" else echo 1 fi }