У меня есть проект django Cookiecutter, который использует Docker. Я пишу свои тесты, используя pytest
и я запускаю свои тесты, используя docker-compose -f local.yml run django pytest
. Мой local.yml
файл находится в моем корневом каталоге (где manage.py)
Я хочу запускать эти тесты автоматически с помощью Gitlab CI. Для этого я настроил свой собственный сервер gitlab, установил и настроил бегунов. В качестве исполнителя использую докер.
Затем я попытался настроить свой gitlab-ci.yml
файл, но я не совсем уверен, как это сделать правильно. Вот что у меня есть на данный момент:
image: docker
services:
- docker:dind
stages:
- test
tests-website:
stage: test
before_script:
- apk update
- apk upgrade
- apk add python python-dev py-pip build-base libffi-dev openssl-dev libgcc
- pip install docker-compose
script:
- docker-compose -f local.yml build
- docker-compose -f local.yml run django pytest
tags:
- docker
Мой конвейер работает нормально, пока docker-compose -f local.yml build
. Тогда я получаю
не удалось подключиться к демону Docker в http: // докер: 2375 - он работает? Если он находится в нестандартном месте, укажите URL-адрес в переменной среды DOCKER_HOST.
Я предполагаю, что это вводящая в заблуждение ошибка, так как я немного пытаюсь понять, как я могу выполнить свой файл local.yml. Или как я могу запустить свои тесты в конвейере. Может быть, мне нужно сделать еще несколько конфигураций, чтобы запустить тесты? Или может быть то, что у меня до сих пор совершенно не так? Я не уверена...
Может ли кто-нибудь помочь мне с этим? Помощь очень ценится! Большое спасибо заранее!
Есть две потенциальные проблемы:
/ # netstat -ntpul
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::2376 :::* LISTEN 1/dockerd
Таким образом, вы можете выбрать использование аутентификации TLS и каким-то образом передать сертификат внутри клиентского контейнера или отключить TLS, выполнив что-то подобное:
tests-website:
stage: test
variables:
DOCKER_TLS_CERTDIR: ""
before_script:
- apk update
- apk upgrade
...
Затем он деградирует до простого TCP (порт 2375)
/ # netstat -ntpul
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::2375 :::* LISTEN 1/dockerd
Что меня интересует, если вы не используете кубернеты или что-то подобное для выполнения своих заданий (я имею в виду простой докер), то почему бы просто не использовать оболочку runner и не поговорить с докером через сокет unix, доступный на этой машине? Если это не вариант, вы можете просто передать сокет докера машины внутрь контейнера клиента, используя средства монтирования, а не запускать дополнительный экземпляр сервера докеров.