Вот ситуация:
У меня есть docker контейнер (Дженкинс). Я установил сокеты в свой контейнер, чтобы я мог выполнять команды docker внутри своего контейнера jenkins.
Вручную все работает в контейнере. Однако, когда Jenkins выполняет задание, он не «ожидает» выполнения команды docker exec
до ее завершения.
Ниже приводится выдержка из файла Jenkinsfile. Краткосрочная команда printenv
выполняется правильно и печатает переменные среды. Следующая команда (python) просто запускается, и затем Дженкинс сразу же начинает двигаться, не дожидаясь завершения. Агент Дженкинс (раб) работает на образе Ubuntu. Выполнение всех этих команд вне Jenkins работает должным образом.
echo "Running the app docker container in detached tty mode to keep it up"
docker run --detach --tty --name "${CONTAINER_NAME}" "${IMAGE_NAME}"
echo "Listing environment variables"
docker exec --interactive "${CONTAINER_NAME}" bash -c "printenv"
echo "Running test coverage"
docker exec --interactive "${CONTAINER_NAME}" bash -c "python -m coverage run --source . --branch -m pytest -vs"
Возможно, это связано с этим вопросом .
Может кто-нибудь объяснить, как заставить Дженкинса ждать docker exec
, чтобы выполнить команду, прежде чем переходить к следующему шагу.
Рассмотрели альтернативы, такие как Docker Pipeline Plugin, но предпочли бы использовать что-то близкое к тому, что у меня было выше, где это возможно.
Хорошо, другой подход, я пытался использовать Docker Плагин конвейера здесь .