当前位置: 首页 > 知识库问答 >
问题:

Jenkins在以根用户身份运行代理docker时生成管道deleteDIR()问题

井洲
2023-03-14

我正在使用docker代理在docker容器中构建我的Jenkins管道,以便隔离单元测试。Jenkins需要以root身份运行,以允许它使用顶级docker套接字。我用-v传入Jenkins Slave的docker套接字,并用-u作为root运行。

当构建完成时,问题就会出现。Jenkins无法在post步骤中使用deleteDirs()清理工作区,因为在运行之后它全部归root所有。

以根用户身份运行docker代理会更改工作区权限,因此jenkins不能再运行下一次运行,也不能在最后删除工作区。运行一次后,如果我不手动删除从节点中的工作区,它的运行将失败,因为在第二次运行时,它现在无法更改任何文件。因此,我不能清理任何东西,詹金斯失去了访问它。此外,我传入的docker套接字并不使用jenkins从节点的用户组,因为ubuntu用户有权运行docker,但是,即使在将它添加到docker映像中的docker组中之后,当我没有以root身份专门运行docker代理时,我仍然会遇到权限问题。

这将失败,因为docker映像neb-base的ubuntu用户无法访问docker套接字。代理{docker{image'neb-base:1.0.10'args'-u ubuntu-v/var/run/docker.sock:/var/run/docker.sock'//-u root}}

当我作为root:agent{docker{image'neb-base:1.0.10'args'-u root-v/var/run/docker.sock:/var/run/docker.sock'//-u root}}运行时

这将失败,因为Jenkins节点不能在最后清理工作区,在下一次运行时,它将无法访问文件,因为所有权已经改变。

关于如何解决这一冲突有什么想法吗?

共有1个答案

华良平
2023-03-14

我想知道更多关于你们的管道。然而,下面是我如何使用Docker。使用cloudBees docker插件,您不需要手动挂载套接字。工作区的安装也由插件负责。您只需要确保主机上的jenkins用户与容器中的jenkins用户相同,或者容器中有根用户。

def image = docker.image(config.dockerImage)
image.pull()
image.inside(dockerOptions) {
sh “mvn -v”
// my other logic 
}
 类似资料:
  • 问题内容: 我需要在Jenkins中以root身份而不是默认用户身份运行Shell脚本。我需要更改什么? 我的sudoers文件是这样的: 问题答案: 您必须使用以下命令运行脚本: 但是在您必须允许在中运行脚本之前。

  • 问题内容: 我在Linux中安装了Jenkins,我想在用户下运行构建。 不只是一个简单的用户,而是属于访问linux计算机的用户列表的一个用户,它属于某个组,因为它具有在特定文件夹下修改/创建文件的特权。 我读过某处可以设置变量$ JENKINS_USER,但是我不知道在哪里以及如何进行设置。感谢您的时间 PS我做了一些研究,所有发布的问题都与此相似,但不相同 如果我不清楚,请阅读以下内容:通常

  • 问题内容: Java中是否有一种方法可以要求系统控制管理员功能。当然不做:右键单击exe->以admin身份运行。 我想要的是UAC提供的框架,例如Windows Vista或Windows 7。 还是在从jar中制作exe时进行一些设置? 问题答案: 你必须创建一个清单文件,该清单文件指定你的应用程序需要管理员权限。你可以将清单包含在exe中,也可以将其保留为单独的文件(yourapp.exe.

  • 问题内容: 我已经尝试过将docker和jenkins一起使用,两者都安装在我的机器上(w10),并且我使用jankins运行docker镜像。但是,当我按照jenkins文档中的示例(来自doc的示例)时,它不起作用。不涉及时,不同的管道脚本可以工作,我还尝试从jenkins config接口添加。 管道脚本 错误堆栈 我在SO上发现了类似的问题\(相同但没有明确的解决方案) 问题答案: 您的工

  • 问题内容: 但是我仍然不能以计算神的热爱,以不同的用户身份运行。这是我所做的步骤: 下载适用于jenkins的macosx pkg(LTS) 安装插件等和git 尝试建立它 我不断收到无法克隆的错误,因为詹金斯一直以匿名身份开始: 如何设置它,让詹金斯像我一样运行?我正在使用jenkins Web UI,因此它位于localhost:8080 我也尝试使用/ login登录,但是我什至无法使用我的

  • 本文向大家介绍以非root用户身份运行Docker容器,包括了以非root用户身份运行Docker容器的使用技巧和注意事项,需要的朋友参考一下 当您在Docker容器中运行应用程序时,默认情况下,它有权访问所有root特权。您可能已经注意到,当打开Ubuntu Docker Container Bash时,默认情况下您以root用户身份登录。在应用程序的安全性方面,这可能是一个主要问题。任何局外人