一尘不染

Jenkins不等待docker exec命令完成

jenkins

情况如下:

我有一个泊坞窗容器(jenkins)。我已经将套接字安装到容器中,以便可以在jenkins容器中执行docker命令。

手动操作,一切都在容器中进行。但是,当詹金斯执行作业时,它不会“等待” docker exec命令运行完成。

下面是Jenkinsfile的摘录。短期printenv命令可以正确运行,并输出环境变量。仅运行下一个命令(python),然后Jenkins立即继续前进,而无需等待完成。Jenkins代理(从属)在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"

请任何人解释如何让詹金斯(Jenkins)等待docker exec命令完成,然后再继续下一步。

已经考虑过替代方案,例如DockerPipeline插件,但是在可能的情况下,我更愿意使用与我上面相似的方法。

好的,另一种方法,我尝试在这里使用DockerPipeline插件。


阅读 495

收藏
2020-07-25

共1个答案

一尘不染

您可以docker.sock像这样在您的主机中用作卷挂载来协调主机上的容器docker-compose.yml

volumes:
  - /var/run/docker.sock:/var/run/docker.sock

根据您的设置,您可能需要运行

chmod 666 /var/run/docker.sock

首先。

这适用于macOS和Linux。

2020-07-25