fix(ci): verify deployment socket and rollback image
This commit is contained in:
parent
006c7e041f
commit
d61d296ea1
3 changed files with 59 additions and 7 deletions
|
|
@ -241,7 +241,6 @@ container_running() {
|
|||
|
||||
wait_for_container_restart() {
|
||||
local expected_image
|
||||
local deadline
|
||||
|
||||
if "$dry_run"; then
|
||||
log "DRY-RUN: would wait for $CONTAINER_NAME to run $latest_tag"
|
||||
|
|
@ -250,18 +249,27 @@ wait_for_container_restart() {
|
|||
|
||||
expected_image="$(latest_image_id)"
|
||||
[ -n "$expected_image" ] || fail "could not resolve image id for $latest_tag"
|
||||
|
||||
wait_for_container_image "$expected_image" "new image" || fail "$CONTAINER_NAME did not restart on $latest_tag within ${DEPLOY_CONTAINER_START_TIMEOUT_SECONDS}s"
|
||||
}
|
||||
|
||||
wait_for_container_image() {
|
||||
local expected_image="$1"
|
||||
local label="$2"
|
||||
local deadline
|
||||
|
||||
deadline=$((SECONDS + DEPLOY_CONTAINER_START_TIMEOUT_SECONDS))
|
||||
|
||||
while [ "$SECONDS" -lt "$deadline" ]; do
|
||||
if container_running && [ "$(container_image_id)" = "$expected_image" ]; then
|
||||
log "$CONTAINER_NAME is running the new image"
|
||||
log "$CONTAINER_NAME is running the $label"
|
||||
return 0
|
||||
fi
|
||||
|
||||
sleep 2
|
||||
done
|
||||
|
||||
fail "$CONTAINER_NAME did not restart on $latest_tag within ${DEPLOY_CONTAINER_START_TIMEOUT_SECONDS}s"
|
||||
return 1
|
||||
}
|
||||
|
||||
smoke_get() {
|
||||
|
|
@ -303,6 +311,8 @@ wait_for_smoke() {
|
|||
}
|
||||
|
||||
rollback() {
|
||||
local rollback_image
|
||||
|
||||
if [ "$deployment_started" != "true" ] || [ -z "$rollback_tag" ] || [ "$rollback_done" = "true" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
|
@ -310,8 +320,18 @@ rollback() {
|
|||
rollback_done=true
|
||||
rollback_in_progress=true
|
||||
printf '[deploy:%s] rolling back to %s\n' "$APP_NAME" "$rollback_tag" >&2
|
||||
rollback_image="$("$container_cli" image inspect "$rollback_tag" --format '{{.Id}}' 2>/dev/null || true)"
|
||||
"$container_cli" tag "$rollback_tag" "$latest_tag" || true
|
||||
restart_service || true
|
||||
if container_running; then
|
||||
restart_service || true
|
||||
else
|
||||
printf '[deploy:%s] waiting for %s to recover with rollback image\n' "$APP_NAME" "$SERVICE_NAME" >&2
|
||||
fi
|
||||
if [ -n "$rollback_image" ] && wait_for_container_image "$rollback_image" "rollback image"; then
|
||||
printf '[deploy:%s] rollback image is running\n' "$APP_NAME" >&2
|
||||
else
|
||||
printf '[deploy:%s] ERROR: rollback image did not become healthy\n' "$APP_NAME" >&2
|
||||
fi
|
||||
rollback_in_progress=false
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue