Update Jenkinsfile to use Docker networks for test containers. Changed database connection URL to reference the container name and added cleanup for the test network. Improved handling of workspace paths for dependency installation.
This commit is contained in:
51
Jenkinsfile
vendored
51
Jenkinsfile
vendored
@@ -58,21 +58,26 @@ pipeline {
|
||||
DB_USER="anexo76"
|
||||
DB_PASS="anexo76"
|
||||
DB_PORT="55432"
|
||||
export TEST_DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@127.0.0.1:${DB_PORT}/${DB_NAME}"
|
||||
export TEST_DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@${DB_CONTAINER}:5432/${DB_NAME}"
|
||||
PY_CONTAINER="anexo76-test-py-${BUILD_NUMBER}"
|
||||
TEST_NETWORK="anexo76-test-net-${BUILD_NUMBER}"
|
||||
|
||||
cleanup() {
|
||||
docker rm -f "$PY_CONTAINER" >/dev/null 2>&1 || true
|
||||
docker rm -f "$DB_CONTAINER" >/dev/null 2>&1 || true
|
||||
docker network rm "$TEST_NETWORK" >/dev/null 2>&1 || true
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
docker network rm "$TEST_NETWORK" >/dev/null 2>&1 || true
|
||||
docker network create "$TEST_NETWORK"
|
||||
|
||||
docker rm -f "$DB_CONTAINER" >/dev/null 2>&1 || true
|
||||
docker run -d --name "$DB_CONTAINER" \
|
||||
--network "$TEST_NETWORK" \
|
||||
-e POSTGRES_DB="$DB_NAME" \
|
||||
-e POSTGRES_USER="$DB_USER" \
|
||||
-e POSTGRES_PASSWORD="$DB_PASS" \
|
||||
-p "${DB_PORT}:5432" \
|
||||
postgres:16-alpine
|
||||
|
||||
# Espera a que Postgres acepte conexiones
|
||||
@@ -84,40 +89,30 @@ pipeline {
|
||||
done
|
||||
docker exec "$DB_CONTAINER" pg_isready -U "$DB_USER" -d "$DB_NAME"
|
||||
|
||||
docker run --name "$PY_CONTAINER" --rm \
|
||||
--network host \
|
||||
docker rm -f "$PY_CONTAINER" >/dev/null 2>&1 || true
|
||||
docker run -d --name "$PY_CONTAINER" --network "$TEST_NETWORK" python:3.12-slim sleep infinity
|
||||
docker exec "$PY_CONTAINER" mkdir -p /workspace
|
||||
docker cp "$WORKSPACE/." "$PY_CONTAINER:/workspace"
|
||||
|
||||
docker exec \
|
||||
-e TEST_DATABASE_URL="$TEST_DATABASE_URL" \
|
||||
-v "$WORKSPACE:/workspace" \
|
||||
-w /workspace \
|
||||
python:3.12-slim \
|
||||
"$PY_CONTAINER" \
|
||||
sh -lc '
|
||||
set -euxo pipefail
|
||||
python --version
|
||||
python -m pip install --upgrade pip
|
||||
REPO_ROOT=""
|
||||
for d in /workspace /workspace/*; do
|
||||
if [ -d "$d/backend" ]; then
|
||||
REPO_ROOT="$d"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$REPO_ROOT" ]; then
|
||||
echo "ERROR: Could not locate repository root containing backend/ directory"
|
||||
ls -la /workspace || true
|
||||
exit 1
|
||||
fi
|
||||
echo "Detected REPO_ROOT=$REPO_ROOT"
|
||||
if [ -f "$REPO_ROOT/backend/requirements.txt" ]; then
|
||||
pip install -r "$REPO_ROOT/backend/requirements.txt"
|
||||
elif [ -f "$REPO_ROOT/backend/requirements/base.txt" ]; then
|
||||
pip install -r "$REPO_ROOT/backend/requirements/base.txt"
|
||||
if [ -f /workspace/backend/requirements.txt ]; then
|
||||
pip install -r /workspace/backend/requirements.txt
|
||||
elif [ -f /workspace/backend/requirements/base.txt ]; then
|
||||
pip install -r /workspace/backend/requirements/base.txt
|
||||
else
|
||||
echo "ERROR: No requirements file found in $REPO_ROOT/backend"
|
||||
ls -la "$REPO_ROOT/backend" || true
|
||||
ls -la "$REPO_ROOT/backend/requirements" || true
|
||||
echo "ERROR: No requirements file found in /workspace/backend"
|
||||
ls -la /workspace || true
|
||||
ls -la /workspace/backend || true
|
||||
ls -la /workspace/backend/requirements || true
|
||||
exit 1
|
||||
fi
|
||||
cd "$REPO_ROOT/backend"
|
||||
cd /workspace/backend
|
||||
alembic upgrade head
|
||||
pytest -q tests -v -ra -s
|
||||
'
|
||||
|
||||
Reference in New Issue
Block a user