我有一个Jenkins文件,它有一个非常基本的管道来旋转一个docker容器:
pipeline {
agent { dockerfile { args '-u root' } }
stages {
stage('Test') {
steps {
echo 'Testing...'
sh 'whoami'
}
}
}
}
问题是我在容器中设置的应用程序是以必须以其自己的用户身份运行的方式配置的,以root身份运行将导致应用程序在启动时失败。如果我将我的args更改为args '-u foo'
,则在构建容器后出现错误:
/var/lib/jenkins/workspace/*/*/jenkins-log.txt permission denied
此路径存在于容器和jenkins服务器中。我遇到了容器内部路径的问题。保存在该位置的其中一个文件也是scripts.sh
- jenkins将管道中的所有sh命令转录到该文件并运行该文件。
这让我陷入了困境 - 似乎Jenkins要求容器以root身份运行以实际发送任何命令,或者与容器内的任何内容进行交互,但除非我使用{{{},否则容器将无法正确构建1}}。
有没有人对这个问题有一个好的解决方案?
答案 0 :(得分:0)
麻烦的是,在Linux机器上,docker主要以root身份运行。 Docker需要以root身份运行,否则会遇到网络和东西问题。因此,您的docker容器由根进程运行,所有创建的文件都将由" root"启用容器。
Jenkins虽然大部分都不以root用户身份运行,因此无权删除这些文件。
可能的解决方案:
希望我正确地解释你的问题,这有助于......