我有一个maven项目,它使用io.fabric8 docker-maven-plugin作为集成测试的一部分来启动数据库。当我在本地运行集成测试时,它可以工作,但是当我在Jenkins服务器上运行时,我收到错误消息,说没有DOCKER_HOST
变量。
[ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.20.1:start (prepare-itdatabase) on project myproject: Execution prepare-itdatabase of goal io.fabric8:docker-maven-plugin:0.20.1:start failed: No <dockerHost> given, no DOCKER_HOST environment variable, no read/writable '/var/run/docker.sock' or '//./pipe/docker_engine' and no external provider like Docker machine configured -> [Help 1]
值得一提的是,我的Jenkins实例本身是通过docker启动的,只需使用类似docker run jenkins
的内容即可。
我在启动Jenkins时尝试将DOCKER_HOST
变量设置为tcp://192.168.59.103:2375
,但这只会导致它在构建中超时。
答案 0 :(得分:0)
我的Jenkins实例本身是通过docker启动的,只需使用docker run jenkins
之类的东西
我假设你直接在容器的Jenkins主机上运行你的构建(没有奴隶)。您的构建过程在容器内运行,该容器没有安装Docker二进制文件或套接字。
您必须在容器中安装Docker套接字并安装Docker二进制文件。 This blog post explains things in details,简而言之,您可以做的是:
使用Docker套接字启动Jenkins容器:
docker run -p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins \
jenkins/jenkins:lts
将Docker安装在容器中。所述博客文章提供了一个方便的脚本在容器内运行:
apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce
您可以手动或作为Jenkins构建的一部分运行此脚本。从现在开始,您应该能够从容器内部(以及构建中)运行Docker命令。
或者,您可以独立于主服务器配置Jenkins Slave,并在此Slave上安装Docker。