gpt4 book ai didi

jenkins - Jenkins将工作区存储在Docker容器外部

转载 作者:行者123 更新时间:2023-12-04 23:19:04 27 4
gpt4 key购买 nike

因此,我有一个Jenkins主从设置,其中主启动了一个docker容器(在从属VM上)并在该容器内构建作业,然后在完成后销毁了该容器。所有这些都通过Jenkins的Docker plugin完成。

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

No Workspace Error

我尝试将主机(从属VM)的“卷”附加到容器,以将文件也存储在外部(这可以正常工作,因为如下所示,我可以在主机上看到文件),然后尝试将其映射到主服务器虚拟机:

Host files

这是该特定docker镜像模板的设置:

Docker template

任何帮助是极大的赞赏!

编辑:我已经成功地使工作空间存储在主机上。但是,当构建完成时,我仍然遇到相同的错误(错误:没有工作空间)。我不知道如何让Jenkins查找主机上而不是容器上的文件。

最佳答案

我遇到了同样的问题,上面的帖子帮助我弄清楚了我的环境配置出了什么问题。但是花了我一段时间才能理解这句话的逻辑:

Ok, so the way I've solved this problem was to mount a dir on the container from the slave docker container, then using NFS (Instructions are shown below) I've mounted the that slave docker container onto Jenkins master.



因此,我决定进行澄清,并写一些更多的解释示例...

这是我的工作环境:
  • 在Ubuntu 16.04服务器上运行的Jenkins主服务器,IP:192.168.1.111
  • 在Ubuntu 16.04服务器上运行的Jenkins Slave Build Server,IP:192.168.1.112
  • 已启用Docker的构建服务器(用于扩展Docker容器),在Ubuntu 16.04服务器上运行,IP:192.168.1.114。

  • 问题陈述:在Docker容器上运行项目时,Jenkins界面下的“工作区”不可用。

    目标:能够在Jenkins界面下以及Jenkins主/从服务器和docker主机服务器上浏览“工作区”。

    好吧,我的问题从另一个问题开始,这导致我找到这篇文章,并弄清楚我的环境配置出了什么问题...

    假设您具有使用正确配置的Jenkins Docker插件的Jenkins / Docker环境。对于第一次运行,我没有在Jenkins Docker插件的“容器设置...”选项下配置任何内容。一切都进行得很顺利-作业成功竞争,显然我无法浏览作业工作空间,因为Jenkins Docker插件设计完成后会破坏Docker容器。到目前为止很好...我需要保存docker工作空间,以便能够查看文件或解决作业失败时的某些问题。为此,我已使用Jenkins Docker插件中“容器设置...”选项中的“卷”将主机/路径从主机映射到容器的容器/路径:

    Configure "Volumes" in "Container settings..."

    我再次运行相同的作业,但在Jenkins中失败,并显示以下错误消息:

    Jenkins error message

    在花了一些时间来学习Jenkins Docker插件的工作方式之后,我发现上面的错误原因是对在自动创建的“工作区”文件夹上的Docker主机服务器(192.168.1.114)的错误权限:

    Wrong Permission on workspace folder

    因此,从这里我们必须为该文件夹分配“其他”组写入权限。仅将jenknis@192.168.1.114用户设置为工作空间文件夹的所有者是不够的,因为我们需要jenkins@192.168.1.111用户能够在192.168.1.114服务器的工作空间文件夹下创建子文件夹。 (就我而言,我在Jenkins主服务器上有jenkins用户-192.168.1.111,在Docker主机服务器上有jenkins用户-192.168.1.114)。
    为了帮助解释所有分组和字母的含义,请在上面的屏幕快照中查看该模式的特写:

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

    现在一切都再次正常运行:Jenkins启动了Docker容器,当docker运行时,Jenkins界面中提供了Workspace:

    Workspace available on Jenkins Interface, when docker still running

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

    Error: no Workspace

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

    因此,从这里开始,我遵循了Fadi帖子中的链接-如何设置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 Master服务器上:
    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界面浏览工作区,但是当作业完成时,我会收到相同的错误“... noworkspace” 。尽管我现在可以在Jenkins主服务器上浏览工作文件,但仍然不是所希望的...
    顺便说一句,如果您需要在Jenkins Master服务器上卸载工作区目录,请使用以下命令:
    sudo umount -f -l /home/jenkins/workspace/<<mountpoint>>

    阅读有关NFS的更多信息:

    How to configure an NFS server and mount NFS shares on Ubuntu 14.10

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

    MultiJob Settings in new Jenkins Job

    就我而言,我还转移了所有与Docker相关的作业,以在Slave Build Server(192.168.1.112)上运行。因此,在这台服务器上,我已经安装了与NFS相关的人员,就像在Jenkins Master Server上一样,并且在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/

    完成上述配置后,我在Jenkins上运行了新的Job,最后得到了我想要的东西:我可以直接从Jenkins界面使用Workspace选项。

    People can browse docker container Workspace directly from Jenkins Interface when job finished

    抱歉,很长的帖子...希望对您有所帮助。

    关于jenkins - Jenkins将工作区存储在Docker容器外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632702/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com