Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d76d8fb330 | ||
|
|
ab8e50823b | ||
|
|
7570a1998f | ||
|
|
7a3684a1b3 | ||
|
|
8523cb61f7 |
@@ -16,7 +16,6 @@ PREV_SHA=""
|
|||||||
TARGET_SHA=""
|
TARGET_SHA=""
|
||||||
EXPECTED_API_VERSION=""
|
EXPECTED_API_VERSION=""
|
||||||
EXPECTED_WEB_VERSION=""
|
EXPECTED_WEB_VERSION=""
|
||||||
APP_TOUCHED=0
|
|
||||||
|
|
||||||
cd "$APP"
|
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"
|
||||||
@@ -53,7 +52,6 @@ publish_status() {
|
|||||||
echo "current_sha=$current"
|
echo "current_sha=$current"
|
||||||
echo "api_version=${EXPECTED_API_VERSION:-unknown}"
|
echo "api_version=${EXPECTED_API_VERSION:-unknown}"
|
||||||
echo "web_version=${EXPECTED_WEB_VERSION:-unknown}"
|
echo "web_version=${EXPECTED_WEB_VERSION:-unknown}"
|
||||||
echo "app_touched=$APP_TOUCHED"
|
|
||||||
echo "backup=${BACKUP:-unknown}"
|
echo "backup=${BACKUP:-unknown}"
|
||||||
} > "$status_file"
|
} > "$status_file"
|
||||||
|
|
||||||
@@ -92,32 +90,21 @@ rollback() {
|
|||||||
echo "============================================================"
|
echo "============================================================"
|
||||||
|
|
||||||
cd "$APP"
|
cd "$APP"
|
||||||
if [ "$APP_TOUCHED" -eq 1 ] && [ -n "${PREV_SHA:-}" ]; then
|
if [ -n "${PREV_SHA:-}" ]; then
|
||||||
echo "Restaurando aplicación al commit previo: $PREV_SHA"
|
|
||||||
git reset --hard "$PREV_SHA" || true
|
git reset --hard "$PREV_SHA" || true
|
||||||
docker compose build api web </dev/null || true
|
docker compose build api web </dev/null || true
|
||||||
docker compose up -d --no-deps --force-recreate api web </dev/null || true
|
docker compose up -d --no-deps --force-recreate api web </dev/null || true
|
||||||
else
|
|
||||||
echo "El candidato falló antes de modificar producción; no se reconstruye ni reinicia la aplicación activa."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "Estado actual:"
|
echo "Estado tras rollback:"
|
||||||
docker compose ps -a </dev/null || true
|
docker compose ps -a </dev/null || true
|
||||||
|
|
||||||
if [ "$APP_TOUCHED" -eq 1 ]; then
|
|
||||||
echo
|
echo
|
||||||
echo "Últimos logs:"
|
echo "Últimos logs:"
|
||||||
docker compose logs --tail=160 api web </dev/null || true
|
docker compose logs --tail=160 api web </dev/null || true
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
if [ -d "$BACKUP" ]; then
|
|
||||||
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."
|
||||||
else
|
|
||||||
echo "No fue necesario crear backup PRE: el fallo ocurrió durante el preflight del candidato, antes de tocar producción."
|
|
||||||
fi
|
|
||||||
exit "$rc"
|
exit "$rc"
|
||||||
}
|
}
|
||||||
trap rollback ERR
|
trap rollback ERR
|
||||||
@@ -132,9 +119,8 @@ for cmd in git docker curl tar node; do
|
|||||||
done
|
done
|
||||||
[ -f "$KEY" ] || { echo "ERROR: falta deploy key $KEY"; false; }
|
[ -f "$KEY" ] || { echo "ERROR: falta deploy key $KEY"; false; }
|
||||||
[ -d .git ] || { echo "ERROR: $APP no es repositorio Git"; false; }
|
[ -d .git ] || { echo "ERROR: $APP no es repositorio Git"; false; }
|
||||||
[ -f .env ] || { echo "ERROR: falta $APP/.env"; false; }
|
|
||||||
|
|
||||||
git config --global --get-all safe.directory 2>/dev/null | grep -Fxq "$APP" || git config --global --add safe.directory "$APP"
|
git config --global --add safe.directory "$APP" >/dev/null 2>&1 || true
|
||||||
|
|
||||||
if [ -n "$(git status --porcelain --untracked-files=no)" ]; then
|
if [ -n "$(git status --porcelain --untracked-files=no)" ]; then
|
||||||
echo "ERROR: hay cambios locales versionados en producción."
|
echo "ERROR: hay cambios locales versionados en producción."
|
||||||
@@ -162,7 +148,7 @@ if ! git merge-base --is-ancestor "$PREV_SHA" "$TARGET_SHA"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
PHASE="candidate-preflight"
|
PHASE="candidate-preflight"
|
||||||
rm -rf "$STAGE"
|
mkdir -p "$STAGE"
|
||||||
git worktree add --detach "$STAGE" "$TARGET_SHA" >/dev/null
|
git worktree add --detach "$STAGE" "$TARGET_SHA" >/dev/null
|
||||||
|
|
||||||
EXPECTED_API_VERSION="$(node -p "require('$STAGE/api-v3/package.json').version")"
|
EXPECTED_API_VERSION="$(node -p "require('$STAGE/api-v3/package.json').version")"
|
||||||
@@ -218,7 +204,6 @@ PHASE="fast-forward"
|
|||||||
echo
|
echo
|
||||||
echo "========== FAST-FORWARD =========="
|
echo "========== FAST-FORWARD =========="
|
||||||
git log --oneline --no-decorate "$PREV_SHA..$TARGET_SHA"
|
git log --oneline --no-decorate "$PREV_SHA..$TARGET_SHA"
|
||||||
APP_TOUCHED=1
|
|
||||||
git merge --ff-only "origin/$DEPLOY_REF"
|
git merge --ff-only "origin/$DEPLOY_REF"
|
||||||
|
|
||||||
PHASE="build"
|
PHASE="build"
|
||||||
|
|||||||
Reference in New Issue
Block a user