在我的Manage Jenkins
> Global Tool Configuration
中,我已经配置了一个名为"docker"的工具,如下所示:
name: docker
install automatically: CHECKED
docker version: latest
然后我jenkinsfile
里只有以下内容,没有别的:
node {
DOCKER_HOME = tool "docker"
sh """
echo $DOCKER_HOME
ls $DOCKER_HOME/bin/
$DOCKER_HOME/bin/docker images
$DOCKER_HOME/bin/docker ps -a
"""
}
我收到这样的错误"无法连接到 Docker 守护程序。docker 守护程序是否在此主机上运行?
以下是完整的console log
:
Started by user Syed Rakib Al Hasan
[Pipeline] node
Running on master in /var/jenkins_home/workspace/helloDocker
[Pipeline] {
[Pipeline] tool
[Pipeline] sh
[helloDocker] Running shell script
+ echo /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker
/var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker
+ ls /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/
docker
+ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/docker/bin/docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
如何确保在我的管道到达运行 docker 命令的行之前,docker 守护程序/服务正在运行/启动。
有没有其他原生 docker-build-step 插件方式来实现我在这里做的事情?喜欢docker ps -a
或docker images
或docker build -t
?
一些假设:
假设我选择的节点尚未在我的主机上安装/运行 docker/docker 引擎。这就是 tool
命令的目的,如果节点中还没有 docker,则自动在节点中安装 docker。
这个 Jenkins 插件适用于 docker 客户端;我会通过以下方式解决(解决方法):
- 在可以访问 docker 守护程序的位置设置 Jenkins 从属,添加标签
- 设置一个内务管理工作,如果无法访问 docker 守护程序,该作业将失败(因此我们可以通知基础设施团队,而无需 QA 来找出并升级问题)
- 分配假定 docker 守护程序可访问此标签的作业
我希望它有所帮助,我很好奇你们中是否有人有更好的解决方案!