如何在 jenkins 管道作业中 运行 docker 命令
how to run docker commands inside jenkins pipeline jobs
在我的 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 守护程序是否在该主机上 运行ning ?”。
完整内容如下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 daemon/service 在我的管道到达 运行 running/started docker命令。
是否有任何其他本地 docker-build-step 插件方式来实现我在这里所做的?喜欢 docker ps -a
或 docker images
或 docker build -t
?
一些假设:
假设我选择的节点在我的主机中还没有 docker/docker-engine installed/running。这就是 tool
命令的目的是在节点中自动安装 docker,如果它还不存在的话。
此 Jenkins 插件适用于 docker 客户端;我会通过以下方式解决(变通):
- 在 docker 守护进程可访问的地方设置 jenkins slaves,添加标签
- 如果 docker 守护程序无法访问,设置一个内务管理工作将会失败(这样我们就可以通知基础设施团队,而无需 QA 找出并上报问题)
- 分配作业,假定 docker 守护程序可以到达此标签
希望对你有所帮助,不知道大家有没有更好的解决办法!
在我的 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 守护程序是否在该主机上 运行ning ?”。
完整内容如下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 daemon/service 在我的管道到达 运行 running/started docker命令。
是否有任何其他本地 docker-build-step 插件方式来实现我在这里所做的?喜欢 docker ps -a
或 docker images
或 docker build -t
?
一些假设:
假设我选择的节点在我的主机中还没有 docker/docker-engine installed/running。这就是 tool
命令的目的是在节点中自动安装 docker,如果它还不存在的话。
此 Jenkins 插件适用于 docker 客户端;我会通过以下方式解决(变通):
- 在 docker 守护进程可访问的地方设置 jenkins slaves,添加标签
- 如果 docker 守护程序无法访问,设置一个内务管理工作将会失败(这样我们就可以通知基础设施团队,而无需 QA 找出并上报问题)
- 分配作业,假定 docker 守护程序可以到达此标签
希望对你有所帮助,不知道大家有没有更好的解决办法!