一尘不染

在Jenkins从站上发布docker命令

jenkins

我有一个运行在Windows Server
2016上的Jenkins主服务器。我需要能够运行linux容器来运行一些自动化的e2e测试。出于某些原因,我无法在此计算机上启用hyper-v。这使我无法在Jenkins主服务器上安装lcow和docker

我要做的是在virtualbox中安装Ubuntu 18.04
VM,并在那里安装docker。我已经使用ssh将VM配置为Jenkins从属,以jenkins用户身份登录。我已经为此用户设置并配置了所有功能,使其能够在不使用的情况下运行docker命令sudo。如果以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/

我还从属节点属性中配置了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命令。


阅读 225

收藏
2020-07-25

共1个答案

一尘不染

终于有了这个问题的答案,我终于明白了。阅读该答案后,我意识到我在Ubuntu上安装了错误版本的docker。我删除了先前的安装,并使用安装了正确的docker软件包sudo curl -sSL https://get.docker.com/ | sh。然后,我重新启动了我的詹金斯奴隶,一切开始正常工作。

2020-07-25