使用Jenkins中的docker-maven-plugin运行maven集成测试

时间:2018-03-29 20:59:39

标签: maven docker jenkins

我有一个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,但这只会导致它在构建中超时。

1 个答案:

答案 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。

相关问题