Gitlab CI/CD Pipeline запускает Django Django запускает модульные тесты перед миграцией
Проблема
Я пытаюсь настроить этап тестирования в CI/CD Gitlab. Локально запуск юнит-тестов проходит нормально и так, как ожидалось. Однако в CI/CD Gitlab при запуске сценария coverage run manage.py test -v 2 && coverage report
модульные тесты выполняются до того, как завершаются миграции в тестовой базе данных, что является неожиданным и всегда приводит к неудаче. Миграции в тестовой базе данных должны выполняться до выполнения модульных тестов.
Есть идеи, почему может произойти такое поведение?
То, что я уже пробовал
- Удаление покрытия и выполнение только
python manage.py test
Результат: та же ошибка - Удаление пользовательского теста, где Gitlab говорит, что тест не удался: Результат: та же ошибка
- Удаление всех юнит-тестов, кроме одного, чтобы попытаться изолировать: Результат: та же ошибка .
- Добавление и активация виртуальной среды внутри контейнера Gitlab: Результат: та же ошибка .
- Пробуем SQLite3: Результат: миграции не удается из-за того, что необходимое в проекте поле массива не поддерживается в SQLite3 .
Вывод Gitlab
Мой фактический вывод намного больше. Но вот соответствующие части:
Local Test Run Output
.gitlab-ci.yml файл
Мой фактический файл намного больше. Но вот соответствующие части:
services:
- docker:20.10.7-dind
- postgres:latest
stages:
- test
variables:
POSTGRES_DB: test_mia
POSTGRES_USER: mia_dev
POSTGRES_PASSWORD: test123
build_test_db:
image: postgres
script:
- export PGPASSWORD=$POSTGRES_PASSWORD
- psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT 'OK' AS status;"
test:
image: python:3.8-slim-buster
stage: test
before_script:
- |
apt-get update && apt-get install -y --no-install-recommends \
gcc \
musl-dev \
python3-dev \
libpq-dev \
libgnutls28-dev \
git \
&& rm -rf /var/lib/apt/lists/*
- python -m pip install --upgrade pip
- pip install uwsgi
- pip install -r requirements.txt
- echo $TEST_SECRETS | base64 -d > config/settings/local.py
script:
- echo RUNNING UNIT TESTS
- coverage run manage.py test -v 2 && coverage report
needs:
- ["build_test_db"]
environment: test
# only:
# - develop
Добавьте строку python manage.py migrate
перед coverage run manage.py test ...
в разделе скриптов вашего gitlab-ci.yml
.