Refactor Alembic upgrade command in Jenkinsfile for improved execution

- Updated the Alembic upgrade command to use a Python script for execution, addressing issues with configuration handling in Docker.
- Enhanced comments to clarify the purpose of the changes and their implications for E2E testing.
This commit is contained in:
2026-04-24 14:21:26 -05:00
parent f9ae9d4180
commit e204ba4b2b
2 changed files with 40 additions and 3 deletions

5
Jenkinsfile vendored
View File

@@ -284,9 +284,8 @@ pipeline {
e2e_compose_fail_logs
exit 1
fi
# Binario /usr/local/bin/alembic: sin python3 -m (el -c rompe; log con -c = build sin el último commit)
# --config=/ruta evita un token que empiece con - (algunos compose run lo mezclan con sus flags)
if ! e2e_compose run --rm --no-deps --entrypoint /usr/local/bin/alembic backend --config=/app/alembic.ini upgrade head; then
# e2e_alembic_upgrade.py: carga /app/alembic.ini en la API; la CLI a veces queda con config vacío bajo compose (No 'script_location')
if ! e2e_compose run --rm --no-deps --entrypoint /usr/local/bin/python3 backend /app/e2e_alembic_upgrade.py; then
echo "ERROR: falló alembic upgrade head (job previo al stack completo)"
e2e_compose_fail_logs
exit 1

View File

@@ -0,0 +1,38 @@
"""
E2E/Jenkins: aplica migraciones sin la CLI de Alembic.
docker compose run … alembic --config=… a veces deja un Config vacío (No 'script_location');
aquí se carga explícitamente /app/alembic.ini y se llama a command.upgrade().
"""
from __future__ import annotations
import os
import sys
from pathlib import Path
def main() -> int:
root = Path("/app")
if not root.is_dir():
print("ERROR: /app no es un directorio (volumen backend).", file=sys.stderr)
return 1
os.chdir(root)
sys.path.insert(0, str(root))
ini = root / "alembic.ini"
if not ini.is_file():
print(
f"ERROR: {ini} no existe. Comprueba el bind ./backend:./app en el agente.",
file=sys.stderr,
)
return 1
from alembic.config import Config
from alembic import command
command.upgrade(Config(str(ini)), "head")
return 0
if __name__ == "__main__":
raise SystemExit(main())