我有一个运行在Windows Server 2016上的Jenkins主服务器。我需要能够运行linux容器来运行一些自动化的e2e测试。由于某些原因,我无法在此计算机上启用hyper-v。这使我无法在Jenkins主服务器上安装lcow和docker
我要做的是在virtualbox中安装Ubuntu 18.04 VM,并在那里安装了docker。我已使用ssh将虚拟机配置为Jenkins从机,并以jenkins
用户身份登录。我已经为此用户设置并配置了所有功能,使其能够在不使用sudo
的情况下运行docker命令。如果我以jenkins用户手动SSH进入服务器,则可以运行docker命令而不会出现问题。一切都按您期望的方式工作。
然后,我设置了一个测试版本,以检查一切是否正常运行。问题是,当我尝试使用Execute Shell
构建步骤运行docker命令时,出现了docker: not found
错误。据我所知,该构建以正确的用户身份运行。我在构建步骤中添加了who -u
,以便可以检查构建所使用的用户。
这是我构建的输出:
[TEST - e2e - TEST] $ /bin/sh -xe /tmp/jenkins16952572249375249520.sh
+ who -u
jenkins pts/0 2018-08-10 16:43 . 10072 (10.0.2.2)
+ docker run hello-world
/tmp/jenkins16952572249375249520.sh: 3: /tmp/jenkins16952572249375249520.sh: docker: not found
正如我提到的,jenkins用户已添加到docker组,而Docker已添加到$PATH
(/snap/bin/
):
jenkins@jenkins-docker-slave:~$ which docker
/snap/bin/docker
jenkins@jenkins-docker-slave:~$ $PATH
-bash:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin: No such file or directory
jenkins@jenkins-docker-slave:~$ who -u
jenkins pts/0 2018-08-10 16:43 . 10072 (10.0.2.2)
jenkins@jenkins-docker-slave:~$ cat /etc/group | grep docker
docker:x:1001:qctesting,jenkins
如您在此片段中所见,我可以通过以jenkins用户身份登录服务器来成功运行docker命令:
jenkins@jenkins-docker-slave:~$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
我还已在slaves节点属性中配置了docker的路径,因为我认为它可以解决我的问题。如您所见,我同时列出了git和docker。 Git命令运行正常。只是docker命令给我带来了问题。我试过/snap/bin
和/snap/bin/docker
都没有运气。
我正在尝试建立一个詹金斯工作,该工作将克隆git repo,使用docker-compose
旋转我需要的容器以及在构建时传入的一些构建参数,并在任何环境下运行e2e测试(质量检查,分期,制作等)。我只是无法让詹金斯奴隶来运行docker命令。我想念什么?我该如何让从属识别出docker已经安装在系统上,并且用户具有执行这些命令的正确权限。
注意:我不是要在docker中运行docker。实际上,我在jenkins从属服务器上运行docker命令时发现的所有问题/文档都描述了如何通过在docker容器中运行从属服务器并将docker客户端安装在从属容器中来解决此问题。那不是我要完成的。我正在尝试从jenkins主服务器切换到已经安装了docker的jenkins从服务器,并以jenkins
用户的身份在该服务器上运行docker命令。
答案 0 :(得分:1)
由于this question的答案,我终于找到了答案。阅读该答案后,我意识到我在Ubuntu上安装了错误版本的docker。我删除了先前的安装并使用sudo curl -sSL https://get.docker.com/ | sh
安装了正确的docker软件包。然后,我重新启动了我的詹金斯奴隶,一切开始正常工作。