Improve deploy scripts

Max Brunsfeld created

Change summary

crates/collab/k8s/migrate.template.yml |  1 +
script/deploy                          | 15 ++++++++++-----
script/deploy-migration                | 22 ++++++++++++++--------
script/lib/deploy-helpers.sh           | 23 ++++++++++-------------
script/what-is-deployed                | 26 ++++++++++++++++++++++----
5 files changed, 57 insertions(+), 30 deletions(-)

Detailed changes

script/deploy 🔗

@@ -7,11 +7,16 @@ if [[ $# < 2 ]]; then
   echo "Usage: $0 <production|staging|preview> <tag-name>"
   exit 1
 fi
-export ZED_KUBE_NAMESPACE=$1
-COLLAB_VERSION=$2
+environment=$1
+version=$2
 
-export_vars_for_environment $ZED_KUBE_NAMESPACE
-export ZED_IMAGE_ID=$(image_id_for_version $COLLAB_VERSION)
-target_zed_kube_cluster
+export_vars_for_environment ${environment}
+image_id=$(image_id_for_version ${version})
+
+export ZED_KUBE_NAMESPACE=${environment}
+export ZED_IMAGE_ID=${image_id}
 
+target_zed_kube_cluster
 envsubst < crates/collab/k8s/manifest.template.yml | kubectl apply -f -
+
+echo "deployed collab v${version} to ${environment}"

script/deploy-migration 🔗

@@ -7,14 +7,20 @@ if [[ $# < 2 ]]; then
   echo "Usage: $0 <production|staging|preview> <tag-name>"
   exit 1
 fi
-export ZED_KUBE_NAMESPACE=$1
-COLLAB_VERSION=$2
+environment=$1
+version=$2
 
-export_vars_for_environment $ZED_KUBE_NAMESPACE
-export ZED_IMAGE_ID=$(image_id_for_version ${COLLAB_VERSION})
-export ZED_MIGRATE_JOB_NAME=zed-migrate-${COLLAB_VERSION}
-target_zed_kube_cluster
+export_vars_for_environment ${environment}
+image_id=$(image_id_for_version ${version})
+
+export ZED_KUBE_NAMESPACE=${environment}
+export ZED_IMAGE_ID=${image_id}
+export ZED_MIGRATE_JOB_NAME=zed-migrate-${version}
 
+target_zed_kube_cluster
 envsubst < crates/collab/k8s/migrate.template.yml | kubectl apply -f -
-pod=$(kubectl --namespace=${ZED_KUBE_NAMESPACE} get pods --selector=job-name=${ZED_MIGRATE_JOB_NAME} --output=jsonpath='{.items[*].metadata.name}')
-echo "pod:" $pod
+
+pod=$(kubectl --namespace=${environment} get pods --selector=job-name=${ZED_MIGRATE_JOB_NAME} --output=jsonpath='{.items[0].metadata.name}')
+
+echo "Job pod:" $pod
+kubectl --namespace=${environment} logs -f ${pod}

script/lib/deploy-helpers.sh 🔗

@@ -1,14 +1,8 @@
-# Prerequisites:
-#
-# - Log in to the DigitalOcean API, either interactively, by running
-#   `doctl auth init`, or by setting the `DIGITALOCEAN_ACCESS_TOKEN`
-#   environment variable.
-
 function export_vars_for_environment {
   local environment=$1
   local env_file="crates/collab/k8s/environments/${environment}.sh"
   if [[ ! -f $env_file ]]; then
-    echo "Invalid environment name '${environment}'"
+    echo "Invalid environment name '${environment}'" >&2
     exit 1
   fi
   export $(cat $env_file)
@@ -16,15 +10,18 @@ function export_vars_for_environment {
 
 function image_id_for_version {
   local version=$1
+
+  # Check that version is valid
   if [[ ! ${version} =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
-    echo "Invalid version number '${version}'"
+    echo "Invalid version number '${version}'" >&2
     exit 1
   fi
-  TAG_NAMES=$(doctl registry repository list-tags collab --no-header --format Tag)
-  if ! $(echo "${TAG_NAMES}" | grep -Fqx v${version}); then
-    echo "No such image tag: 'zed/collab:v${version}'"
-    echo "Found tags"
-    echo "${TAG_NAMES}"
+
+  # Check that image exists for version
+  tag_names=$(doctl registry repository list-tags collab --no-header --format Tag)
+  if ! $(echo "${tag_names}" | grep -Fqx v${version}); then
+    echo "No docker image tagged for version '${version}'" >&2
+    echo "Found images with these tags:" ${tag_names} >&2
     exit 1
   fi
   

script/what-is-deployed 🔗

@@ -7,11 +7,29 @@ if [[ $# < 1 ]]; then
   echo "Usage: $0 <production|staging|preview>"
   exit 1
 fi
-ZED_KUBE_NAMESPACE=$1
+environment=$1
 
-export_vars_for_environment $ZED_KUBE_NAMESPACE
+export_vars_for_environment ${environment}
 target_zed_kube_cluster
 
-IMAGE_ID=$(kubectl --namespace=${ZED_KUBE_NAMESPACE} get deployment collab -o 'jsonpath={.spec.template.spec.containers[0].image}')
+deployed_image_id=$(
+  kubectl \
+    --namespace=${environment} \
+    get deployment collab \
+    -o 'jsonpath={.spec.template.spec.containers[0].image}' \
+    | cut -d: -f2
+)
 
-echo "Deployed image on ${ZED_KUBE_NAMESPACE}:" $(version_for_image_id $IMAGE_ID)
+job_image_ids=$(
+  kubectl \
+    --namespace=${environment} \
+    get jobs \
+    -o 'jsonpath={range .items[0:5]}{.spec.template.spec.containers[0].image}{"\n"}{end}'
+)
+
+echo "Deployed image version:"
+echo "$deployed_image_id"
+echo
+echo "Migration job image versions:"
+echo "$job_image_ids"
+echo