jenkins在docker集装箱外存放工作区
所以我有一个jenkins主从设置,主人旋转了一个docker集装箱(在从属虚拟机),并在该容器内部build立作业,然后在完成后破坏容器。 这一切都是通过Jenkins的Docker 插件完成的 。
一切都运行顺利,但唯一的问题是,作业完成后(失败的作业),我无法查看工作区(因为容器已经消失)。 我得到以下错误:
我已经尝试从主机(从属虚拟机)附加一个“卷”到容器外也存储文件(这是因为,如下所示,我可以看到主机上的文件),然后尝试映射到主VM:
这是我的设置为特定的泊坞窗图像模板:
任何帮助是极大的赞赏!
编辑:我已经设法成功获取工作区存储在主机上。但是,当构build完成后,我仍然得到相同的错误(错误:没有工作区)。 我不知道如何让Jenkins查找主机上的文件而不是容器。
我面临同样的问题,上面的post帮助我找出在我的环境configuration中出了什么问题。 但是我花了一段时间来理解这句话的逻辑:
好吧,我解决这个问题的方法是从奴隶docker集装箱装载一个目录,然后使用NFS(说明如下所示)我已经把那个从docker集装箱安装到jenkins主。
所以我决定澄清一下,再写一些解释的例子。
这是我的工作环境:
- Jenkins master在Ubuntu 16.04服务器上运行,IP:192.168.1.111
- 在Ubuntu 16.04服务器上运行的Jenkins Slave Build Server,IP:192.168.1.112
- 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)。 为了帮助解释所有分组和字母的含义,请查看以上屏幕截图中该模式的特写:
ssh jenkins@192.168.1.114 cd /home/jenkins sudo chmod o+w workspace
现在一切正常了:Jenkins旋转了docker容器,当docker运行时,Jenkins界面中的Workspace可用:
但是工作完成后它就消失了
有人可以说,这里没有问题,因为从容器的所有文件,现在保存在泊坞窗主机服务器上的工作区目录下(我们映射在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:
在我的情况下,我也转移所有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选项。
对不起长post…我希望这对你有帮助。
好的,所以我解决这个问题的方法是从奴隶docker集装箱装载一个目录,然后使用NFS(说明如下所示)我已经将该从站docker集装箱安装到jenkins主。
所以我的configuration如下所示:
我遵循这个答案来安装dir作为NFS:
一个小问题是,在这个答案中提供的IP地址(你将不得不放在/ etc / exports中 )是本地机器(或者在我的情况下是jenkins主机)的IP地址。
我希望这个答案可以帮助你!