jenkinsdocker工人代理pipe道没有根

我有一个非常基本的pipe道Jenkinsfile旋转docker集装箱:

pipeline { agent { dockerfile { args '-u root' } } stages { stage('Test') { steps { echo 'Testing...' sh 'whoami' } } } } 

问题是我在我的容器中设置的应用程序被configuration为必须以自己的用户身份运行,以root身份运行将导致应用程序在启动时失败。 如果我将args更改为args '-u foo' ,则在构build容器后出现错误:

/var/lib/jenkins/workspace/*/*/jenkins-log.txt permission denied

这个path在容器和jenkins服务器中都存在。 我在容器内的path有问题。 其中一个保存在该位置的文件也是一个scripts.sh – jenkins将pipe道中的所有sh命令转录到该文件并运行该文件。

这使我陷入困境 – 看起来好像Jenkins要求以root身份运行容器来实际发送任何命令,或者与容器内的任何内容交互,但容器将不能正确构build,除非我使用foo

有没有人有任何想法解决这个问题的好方法?

麻烦的是,在Linux机器上,docker大多以root身份运行。 Docker需要以root身份运行,否则会遇到networking和其他问题。 所以你的docker容器是由一个根进程运行,所有创build的文件将由“启用root”的容器创build。

jenkins虽然大多不作为根运行,因此没有权利删除这些文件。

可能的scheme

  • 确保在卷(对本地jenkins驱动器)中创build的文件有权分配给jenkins可以使用的权限

希望我解释你的问题正确,这有助于…