情况如下:
我有一个泊坞窗容器(jenkins)。我已经将套接字安装到容器中,以便可以在jenkins容器中执行docker命令。
手动操作,一切都在容器中进行。但是,当詹金斯执行作业时,它不会“等待” docker exec命令运行完成。
docker exec
下面是Jenkinsfile的摘录。短期printenv命令可以正确运行,并输出环境变量。仅运行下一个命令(python),然后Jenkins立即继续前进,而无需等待完成。Jenkins代理(从属)在Ubuntu映像上运行。在Jenkins外部运行所有这些命令可以正常工作。
printenv
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插件。
您可以docker.sock像这样在您的主机中用作卷挂载来协调主机上的容器docker-compose.yml
docker.sock
docker-compose.yml
volumes: - /var/run/docker.sock:/var/run/docker.sock
根据您的设置,您可能需要运行
chmod 666 /var/run/docker.sock
首先。
这适用于macOS和Linux。