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.

Вернуться на верх