ops: harden deploy exit and rollback handling

This commit is contained in:
2026-09-05 10:16:26 -03:00
parent 7570a1998f
commit ab8e50823b
+16 -12
View File
@@ -21,9 +21,15 @@ cd "$APP"
export GIT_SSH_COMMAND="ssh -i $KEY -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new" export GIT_SSH_COMMAND="ssh -i $KEY -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new"
exec > >(tee -a "$LOG") 2>&1 exec > >(tee -a "$LOG") 2>&1
cleanup() {
set +e
git worktree remove --force "$STAGE" >/dev/null 2>&1 || true
rm -rf "$STAGE"
docker image rm "$API_TEST_IMAGE" "$WEB_TEST_IMAGE" >/dev/null 2>&1 || true
}
publish_status() { publish_status() {
local rc="${1:-1}" local rc="${1:-1}"
trap - EXIT ERR
set +e set +e
local outcome="failure" local outcome="failure"
@@ -63,20 +69,21 @@ publish_status() {
rm -f "$status_file" "$log_file" rm -f "$status_file" "$log_file"
} }
trap 'rc=$?; publish_status "$rc"; exit "$rc"' EXIT
cleanup() { on_exit() {
set +e local rc=$?
git worktree remove --force "$STAGE" >/dev/null 2>&1 || true trap - EXIT ERR
rm -rf "$STAGE" cleanup
docker image rm "$API_TEST_IMAGE" "$WEB_TEST_IMAGE" >/dev/null 2>&1 || true publish_status "$rc"
exit "$rc"
} }
trap cleanup RETURN trap on_exit EXIT
rollback() { rollback() {
local rc=$? local rc=$?
trap - ERR trap - ERR
PHASE="rollback" PHASE="rollback"
echo echo
echo "============================================================" echo "============================================================"
echo " DH V2 · DEPLOY FALLÓ · ROLLBACK" echo " DH V2 · DEPLOY FALLÓ · ROLLBACK"
@@ -98,13 +105,12 @@ rollback() {
echo echo
echo "Backup PRE disponible en: $BACKUP" echo "Backup PRE disponible en: $BACKUP"
echo "Las migraciones son forward-only; database-before.dump queda disponible para restauración manual si hiciera falta." echo "Las migraciones son forward-only; database-before.dump queda disponible para restauración manual si hiciera falta."
cleanup
exit "$rc" exit "$rc"
} }
trap rollback ERR trap rollback ERR
echo echo
echo "============================================================" echo "============================================================"
echo " DH V2 · DEPLOY DESDE GITHUB · $DEPLOY_REF" echo " DH V2 · DEPLOY DESDE GITHUB · $DEPLOY_REF"
echo "============================================================" echo "============================================================"
@@ -133,7 +139,6 @@ echo "Objetivo: $TARGET_SHA"
if [ "$TARGET_SHA" = "$PREV_SHA" ]; then if [ "$TARGET_SHA" = "$PREV_SHA" ]; then
echo "Producción ya está en el commit autorizado." echo "Producción ya está en el commit autorizado."
PHASE="complete" PHASE="complete"
cleanup
exit 0 exit 0
fi fi
@@ -271,7 +276,6 @@ chmod 600 "$BACKUP"/* "$BACKUP/.env" 2>/dev/null || true
PHASE="complete" PHASE="complete"
trap - ERR trap - ERR
cleanup
echo echo
echo "============================================================" echo "============================================================"