67 lines
2.6 KiB
Bash
Executable File
67 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build linux/amd64 binaries + runtime image locally, deploy to ECS, with rollback on health failure.
|
|
set -euo pipefail
|
|
|
|
DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
# shellcheck source=lib.sh
|
|
source "$DIR/lib.sh"
|
|
deploy_lib_init
|
|
|
|
ROOT="$ROOT"
|
|
RELEASE="$(deploy_lib_release "$ROOT")"
|
|
IMAGE_VERSIONED="${IMAGE_BASE}:${RELEASE}"
|
|
TAR_VERSIONED="$ROOT/bin/spark-server-${RELEASE}.tar.gz"
|
|
TAR_LATEST="$ROOT/bin/spark-server.tar.gz"
|
|
|
|
deploy_lib_need_tools
|
|
|
|
echo "==> release $RELEASE"
|
|
echo "==> local linux/amd64 binaries + image"
|
|
make -C "$ROOT" image IMAGE="$IMAGE_LATEST"
|
|
docker tag "$IMAGE_LATEST" "$IMAGE_VERSIONED"
|
|
mkdir -p "$(dirname "$TAR_VERSIONED")"
|
|
docker save "$IMAGE_VERSIONED" | gzip -c >"$TAR_VERSIONED"
|
|
cp -f "$TAR_VERSIONED" "$TAR_LATEST"
|
|
echo "image $(docker image inspect "$IMAGE_LATEST" --format '{{.Size}}') bytes, tar $(wc -c <"$TAR_VERSIONED") bytes"
|
|
|
|
echo "==> upload (config on host is never overwritten unless SPARK_UPLOAD_CONFIG=1)"
|
|
"${SSH[@]}" "mkdir -p $DATA/compose $DATA/configs $DATA/logs $DATA/images $DATA/releases"
|
|
echo "==> stamp rollback point on host (before image load)"
|
|
deploy_lib_remote_stamp_rollback "$DATA"
|
|
"${SCP[@]}" "$TAR_VERSIONED" "$HOST:$DATA/images/$(basename "$TAR_VERSIONED")"
|
|
"${SCP[@]}" "$TAR_LATEST" "$HOST:$DATA/images/spark-server.tar.gz"
|
|
"${SCP[@]}" "$ROOT/deploy/docker/docker-compose.yaml" "$HOST:$DATA/compose/docker-compose.yaml"
|
|
if [[ "${SPARK_UPLOAD_CONFIG:-0}" == "1" ]]; then
|
|
echo "==> upload config (SPARK_UPLOAD_CONFIG=1)"
|
|
"${SCP[@]}" "$ROOT/deploy/docker/config.docker.yaml" "$HOST:$DATA/configs/config.yaml"
|
|
fi
|
|
rsync -az -e "ssh -i $KEY -o BatchMode=yes" \
|
|
"$ROOT/deploy/nginx/host/" "$HOST:/tmp/spark-nginx-host/"
|
|
|
|
echo "==> load, migrate, start"
|
|
deploy_lib_remote_load_and_up "$DATA" "$DATA/images/$(basename "$TAR_VERSIONED")" 1 "$RELEASE"
|
|
|
|
echo "==> nginx reload"
|
|
deploy_lib_remote_nginx_reload
|
|
|
|
echo "==> health check"
|
|
if deploy_lib_remote_health 12 5; then
|
|
deploy_lib_remote_write_manifest "$DATA" "$RELEASE" "$(basename "$TAR_VERSIONED")" "ok"
|
|
deploy_lib_remote_ps
|
|
echo "==> deploy OK ($RELEASE)"
|
|
"${SSH[@]}" "curl -fsS http://127.0.0.1:18080/healthz && echo && curl -fsS http://127.0.0.1:18080/readyz && echo"
|
|
exit 0
|
|
fi
|
|
|
|
echo "==> health check failed — rolling back app to spark-server:rollback" >&2
|
|
if deploy_lib_remote_rollback "$DATA" && deploy_lib_remote_health 8 5; then
|
|
deploy_lib_remote_write_manifest "$DATA" "$RELEASE" "$(basename "$TAR_VERSIONED")" "failed_rolled_back"
|
|
deploy_lib_remote_ps
|
|
echo "rolled back to previous image; fix the build and redeploy" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "==> rollback also failed — check docker logs on host" >&2
|
|
deploy_lib_remote_ps
|
|
exit 2
|