Чтобы правильно выполнить мои тесты, я создаю образ Docker и запускаю его (слегка измененный контейнер MySQL). Поскольку я создаю контейнер из файла Dockerfile (а не только извлекаю его из реестра), я не использую возможности службы GitHub или контейнера (https://docs.github.com/en/actions/ use-cases-and-examples/using-containerized-services/about-service-containers).
Вместо этого в рабочем процессе GH у меня есть несколько шагов, посвященных созданию контейнера и его запуску, как это
Код: Выделить всё
- name: build docker container
run: |
cd tests/functional/olbp/mocked_data/
docker build --no-cache -f my_service.Dockerfile -t my_service_test:latest .
- name: run container
run: docker run --name my_service -d -p 127.0.0.1:3306:3306 my_service_test --sql_mode="NO_ENGINE_SUBSTITUTION"
- name: wait for MySQL to start
run: |
until mysqladmin ping -h 127.0.0.1 --silent; do
echo 'Waiting for MySQL to start...'
sleep 1
done
Код: Выделить всё
- name: run the functional tests
run: python -m pytest tests/functional -vv -s --log-cli-level=DEBUG
Однако я изо всех сил пытаюсь взаимодействовать с Docker в этом контексте. Я хотел бы создать часть моих тестов mysqldump. Итак, я написал это в своих тестах:
Код: Выделить всё
dck_exc_output = subprocess.run(
[
"docker",
"exec",
"my_service",
"mysqldump",
"--skip-triggers",
"--skip-extended-insert",
"--compact",
"--no-create-info",
"-uroot",
"-psupersecret",
"my_db",
"my_table",
">",
live_data_dump,
],
capture_output=True,
shell=True,
)
logging.debug(dck_exc_output)
Код: Выделить всё
DEBUG root:my_test.py:246 CompletedProcess(args=['docker', 'version'], returncode=0, stdout=b'', stderr=b'
Usage: docker [OPTIONS] COMMAND
...
')
Я не могу понять, почему я получаю этот вывод. Кажется, исполняемый файл Docker найден (поскольку я получаю страницу справки, как будто я выполнял неправильную команду), но он не будет выполняться так, как при локальном запуске теста.
Подробнее здесь: https://stackoverflow.com/questions/790 ... hub-runner