jenkins在docker集装箱外存放工作区

所以我有一个jenkins主从设置,主人旋转了一个docker集装箱(在从属虚拟机),并在该容器内部build立作业,然后在完成后破坏容器。 这一切都是通过Jenkins的Docker 插件完成的 。

一切都运行顺利,但唯一的问题是,作业完成后(失败的作业),我无法查看工作区(因为容器已经消失)。 我得到以下错误:

没有工作区错误

我已经尝试从主机(从属虚拟机)附加一个“卷”到容器外也存储文件(这是因为,如下所示,我可以看到主机上的文件),然后尝试映射到主VM:

主机文件

这是我的设置为特定的泊坞窗图像模板:

码头模板

任何帮助是极大的赞赏!

编辑:我已经设法成功获取工作区存储在主机上。但是,当构build完成后,我仍然得到相同的错误(错误:没有工作区)。 我不知道如何让Jenkins查找主机上的文件而不是容器。

我面临同样的问题,上面的post帮助我找出在我的环境configuration中出了什么问题。 但是我花了一段时间来理解这句话的逻辑:

好吧,我解决这个问题的方法是从奴隶docker集装箱装载一个目录,然后使用NFS(说明如下所示)我已经把那个从docker集装箱安装到jenkins主。

所以我决定澄清一下,再写一些解释的例子。

这是我的工作环境:

  1. Jenkins master在Ubuntu 16.04服务器上运行,IP:192.168.1.111
  2. 在Ubuntu 16.04服务器上运行的Jenkins Slave Build Server,IP:192.168.1.112
  3. Docker启用构build服务器(用于启动Docker容器),在Ubuntu 16.04服务器上运行,IP:192.168.1.114。

问题说明:在Docker容器上运行项目时,“Workspace”在Jenkins界面下不可用。

目标:能够浏览Jenkins界面以及Jenkins主/从和主机服务器上的“Workspace”。

那么,我的问题开始于不同的问题,这导致我find这个职位,找出我的环境configuration有什么问题…

假设您已经使用正确configuration的Jenkins Docker插件来运行Jenkins / Docker环境。 对于第一次运行,我没有在Jenkins Docker Plugin中的“Container settings …”选项下configuration任何东西。 一切顺利 – 工作竞争成功,显然我不能浏览工作的工作空间,因为jenkinsdocker插件devise在完成工作后破坏docker集装箱。 到目前为止这么好…我需要保存docker工作空间,以便能够审查文件或解决一些问题,当工作失败。 为此,我使用Jenkins Docker Plugin中“Container settings …”选项中的“Volumes”将主机/path从主机映射到容器的容器/path:

在“容器设置...”中配置“容量”

我再次运行相同的工作,并在Jenkins中出现以下错误消息:

詹金斯错误消息

花了一些时间来了解Jenkins Docker Plugin的工作原理之后,我发现上面错误的原因是Docker主机服务器(192.168.1.114)在自动创build的“workspace”文件夹上的权限错误:

工作区文件夹上的权限错误

所以,从这里我们必须给这个文件夹分配“其他”组写入权限。 将jenknis@192.168.1.114用户设置为workspace文件夹的所有者将是不够的,因为我们需要jenkins@192.168.1.111用户可以在192.168.1.114服务器的workspace文件夹下创build子文件夹。 (在我的情况下,我有jenkins主服务器上的jenkins用户 – 192.168.1.111和jenkins用户以及在Docker主机服务器上 – 192.168.1.114)。 为了帮助解释所有分组和字母的含义,请查看以上屏幕截图中该模式的特写:

Linux权限

ssh jenkins@192.168.1.114 cd /home/jenkins sudo chmod o+w workspace 

现在一切正常了:Jenkins旋转了docker容器,当docker运行时,Jenkins界面中的Workspace可用:

当docker仍在运行时,Jenkins界面上可用的工作区

但是工作完成后它就消失了

错误:没有工作区

有人可以说,这里没有问题,因为从容器的所有文件,现在保存在泊坞窗主机服务器上的工作区目录下(我们映射在Jenkins Docker插件设置下的文件夹)…这是正确的! 所有文件都在这里: /home/jenkins/workspace/"JobName"/在Docker Host Server上(192.168.1.114)但是在某些情况下,人们希望能够直接从Jenkins界面浏览作业工作空间。

所以,从这里我已经跟着Fadi的post链接 – 如何设置NFS共享。

提醒,目标是:能够直接从Jenkins界面浏览Docker作业工作区…我在Docker主机服务器(192.168.1.114)上做了什么:

 1. sudo apt-get install nfs-kernel-server nfs-common 2. sudo nano /etc/exports # Share docker slave containers workspace with Jenkins master /home/jenkins/workspace 192.168.1.111(rw,sync,no_subtree_check,no_root_squash) 3. sudo exportfs -ra 4. sudo /etc/init.d/nfs-kernel-server restart 

这将允许在Jenkins主服务器(192.168.1.111)上安装Docker主机服务器(192.168.1.114)/ home / jenkins / workspace文件夹。

在Jenkins主服务器上:

 1. sudo apt-get install nfs-client nfs-common 2. sudo mount -o soft,intr,rsize=8192,wsize=8192 192.168.1.114:/home/jenkins/workspace/ /home/jenkins/workspace/<JobName/ 

现在,安装了192.168.1.114:/home/jenkins/workspace文件夹,并在Jenkins主目录下的/ home / jenkins / workspace /“JobName”/文件夹下可见。

到目前为止这么好…我已经再次运行这个工作,并面对同样的行为:当docker仍在运行 – 用户可以从Jenkins界面浏览工作区,但是当工作完成时,我得到同样的错误“…没有工作区” 。 尽pipe我现在可以浏览Jenkins主服务器本身的作业文件,但它仍然不是所期望的…
顺便说一句,如果您需要在Jenkins主服务器上卸载工作区目录,请使用以下命令:

 sudo umount -f -l /home/jenkins/workspace/<<mountpoint>> 

了解更多关于NFS的信息

如何在Ubuntu 14.10上configurationNFS服务器并挂载NFS共享

解决此问题的方法是在Jenkins上安装Multijob插件 ,并将新作业添加到将使用Multijob插件选项的Jenkins:

新Jenkins作业中的MultiJob设置

在我的情况下,我也转移所有docker相关的作业,以运行在奴隶生成服务器(192.168.1.112)。 所以在这个服务器上我已经安装了NFS相关的工作人员,就像在Jenkins Master服务器上一样,并且在Docker主机服务器(192.168.1.114)上添加了一些工作人员:

 ssh jenkins@192.168.1.114 sudo nano edit /etc/exports # Share docker slave containers workspace with build-server /home/jenkins/workspace 192.168.1.112(rw,sync,no_subtree_check,no_root_squash) 

另外在jenkins奴隶(192.168.1.112)服务器我跑了以下:

 1. sudo apt-get install nfs-client nfs-common 2. sudo mount -o soft,intr,rsize=8192,wsize=8192 192.168.1.114:/home/jenkins/workspace/ /home/jenkins/workspace/<JobName/ 

完成上述configuration之后,我在Jenkins上运行了新的Job,最后得到了我想要的:我可以直接从Jenkins接口使用Workspace选项。

工作完成后,人们可以直接从Jenkins界面浏览码头工作区工作区

对不起长post…我希望这对你有帮助。

好的,所以我解决这个问题的方法是从奴隶docker集装箱装载一个目录,然后使用NFS(说明如下所示)我已经将该从站docker集装箱安装到jenkins主。

所以我的configuration如下所示:

在这里输入图像说明

我遵循这个答案来安装dir作为NFS:

https://superuser.com/questions/300662/how-to-mount-a-folder-from-a-linux-machine-on-another-linux-machine/300703#300703

一个小问题是,在这个答案中提供的IP地址(你将不得不放在/ etc / exports中 )是本地机器(或者在我的情况下是jenkins主机)的IP地址。

我希望这个答案可以帮助你!