Запустить команду docker в подпроцессе Python в бегуне GitHubPython

Программы на Python
Anonymous
Запустить команду docker в подпроцессе Python в бегуне GitHub

Сообщение Anonymous »

Я запускаю функциональные тесты как CI в своем бегуне GitHub.
Чтобы правильно выполнить мои тесты, я создаю образ 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
Наконец, я вызываю свои функциональные тесты (pytest) с помощью Python

Код: Выделить всё

  - name: run the functional tests
run: python -m pytest tests/functional -vv -s --log-cli-level=DEBUG
Это работает нормально, мои тесты могут явно взаимодействовать с контейнером MySQL.
Однако я изо всех сил пытаюсь взаимодействовать с 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)
Он работает нормально при запуске с моего компьютера, но всякий раз, когда я пытаюсь запустить его внутри GH Runner (эта команда докера или даже простая версия докера). В конечном итоге я получаю этот вывод (вывод для подпроцесса простой версии докера через подпроцесс):

Код: Выделить всё

DEBUG    root:my_test.py:246 CompletedProcess(args=['docker', 'version'], returncode=0, stdout=b'', stderr=b'
Usage:  docker [OPTIONS] COMMAND

...
')
Я уже подтвердил, что у меня один и тот же пользователь, одно и то же разрешение и одна и та же переменная env между подпроцессом и командами запуска GH.

Я не могу понять, почему я получаю этот вывод. Кажется, исполняемый файл Docker найден (поскольку я получаю страницу справки, как будто я выполнял неправильную команду), но он не будет выполняться так, как при локальном запуске теста.

Подробнее здесь: https://stackoverflow.com/questions/790 ... hub-runner

Вернуться в «Python»