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"

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