Gitlab ci не удается запустить docker-compose для приложения django
Я настраиваю конвейер gitlab, который хочу использовать для развертывания приложения Django на AWS с помощью Terraform.
На данный момент я просто настраиваю конвейер так, чтобы он валидировал terraform и запускал тесты (pytest) и lynting.
Конвейер использует docker в docker и выглядит следующим образом:
image:
name: hashicorp/terraform:1.0.5
entrypoint:
- '/usr/bin/env'
- 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
stages:
- Test and Lint
Test and Lint:
image: docker:20.10.9
services:
- docker:20.10.9-dind
stage: Test and Lint
script:
- apk add --update docker-compose
- apk add python3
- apk add py3-pip
- docker-compose run --rm app sh -c "pytest && flake8"
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^(master|production)$/ || $CI_COMMIT_BRANCH =~ /^(master|production)$/'
Конвейер не может запустить тесты из-за ошибки базы данных, что странно, поскольку я использую pytest для имитации базы данных django.
Если я просто побегу:
docker-compose run --rm app sh -c "pytest && flake8"
на терминале моей локальной машины все тесты пройдены.
Есть идеи, как я могу отладить это?
p.s. дайте мне знать, если мне нужно добавить больше информации.
Я не думаю, что вы можете запустить docker в CI напрямую. Вы можете указать, какой образ использовать на каждом шаге, а затем выполнить команды. Например:
image: "python:3.7"
before_script:
- python --version
- pip install -r requirements.txt
stages:
- Static Analysis
- Test
unit_test:
stage: Test
script:
- pytest
В этом конвейере я использовал образ python:3.7. Вы можете загрузить свой образ docker в какой-нибудь реестр и использовать его в конвейере.
Мне удалось решить эту проблему, и тесты в CI проходят с использованием
script:
- apk add --update docker-compose
- docker-compose up -d --build && docker-compose run --rm app sh -c "pytest && flake8"