【发布时间】:2019-01-18 10:24:41
【问题描述】:
我有一个在 Windows Server 2016 上运行的 Jenkins master。我需要能够运行 linux 容器来运行一些自动化的 e2e 测试。由于我不会进入的原因,我无法在这台机器上启用 hyper-v。这使我无法在我的 Jenkins master 上安装 lcow 和 docker
我所做的是在 virtualbox 中设置一个 Ubuntu 18.04 VM 并在那里安装 docker。我已将 VM 配置为 Jenkins 从属设备,使用 ssh 以 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
从这个 sn-p 可以看出,我可以通过以 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/
我还在从属节点属性中配置了 docker 的路径,因为我认为它可以解决我的问题。如您所见,我列出了 git 和 docker。 Git 命令运行良好。只有 docker 命令给我带来了问题。我试过/snap/bin 和/snap/bin/docker 都没有运气。
我正在尝试构建一个 jenkins 作业,它将克隆一个 git repo,使用 docker-compose 和我在构建时传入的一些构建参数启动我需要的容器,并针对任何环境运行我的 e2e 测试(qa、分期,生产等)。我只是无法让詹金斯奴隶运行 docker 命令。我错过了什么?如何让从站识别系统上已经安装了 docker 并且用户具有执行这些命令的正确权限。
注意:我不想在 docker 中运行 docker。实际上,我在 jenkins 从属设备上运行 docker 命令时发现的所有问题/文档都描述了如何通过在 docker 容器中运行从属设备并在从属容器中安装 docker 客户端来解决此问题。这不是我想要完成的。我正在尝试从 jenkins master SSH 到已经安装了 docker 的 jenkins slave,并以 jenkins 用户身份在该服务器上运行 docker 命令。
【问题讨论】: