Конвейер модульных тестов - модульные тесты Django
Я работаю над проектом django и в нем 20+ приложений, что означает, что я должен запускать тесты для 20+ приложений, которые включают 3000+ тестов. Поэтому я решил сделать subjobs в моем pipeline и теперь запускаю 20 заданий для юнит-тестов при коммите. Но проблема в том, что когда более одного разработчика коммитит и тесты запускаются для обоих, конвейер застревает. Pipeline runners зарегистрированы на VM of 32 CPU cores and 24 GB of RAM.
загрузка процессора становится 100% и задания застревают (deadlock).
Как оптимизировать подзадания конвейера, чтобы при работе нескольких разработчиков они не застревали.
unit_test:
stage: test
rules:
- changes:
- backend/
tags:
- workstream-unit-test
when: manual
allow_failure: false
parallel:
matrix:
- APP_NAME:
- apps.app1
- apps.app2
- .
- apps.app20
before_script:
- apt-get update
- apt-get install -y unixodbc unixodbc-dev
- pip install virtualenv
- virtualenv venv
- source venv/bin/activate
- pip install -r requirements.txt
script:
- COVERAGE_FILENAME=$(echo "$APP_NAME" | tr '.' '_')_coverage.xml
- coverage run --source=$APP_NAME ./manage.py test $APP_NAME --settings=hrdb.test_settings --keepdb --noinput
- coverage xml -i -o $COVERAGE_FILENAME
- coverage report -m --fail-under=90 --skip-covered
coverage: '/(?i)TOTAL.*? (100(?:\.0+)?%|[1-9]?\d(?:\.\d+)?%)$/'
artifacts:
expire_in: 2 hour
paths:
- $CI_PROJECT_DIR/$APP_NAME_coverage.xml`
Я рассчитываю использовать ту же VM с теми же характеристиками, но с оптимизацией конвейера, чтобы процесс конвейера проходил гладко