[英]sudo permission inside docker container for jenkins pipeline
我已经使用声明性语法创建了一个Jenkinsfile来构建我的nodejs应用程序。 我曾经使用过docker代理来构建,现在它给了我权限错误。 这是我的样本Jenkinsfile。
pipeline {
agent {
docker {
image 'node:8.4'
}
}
stages {
stage('build') {
steps {
sh 'pwd'
sh 'npm --version'
sh 'npm --prefix ./Server install'
}
}
}
}
Unhandled rejection Error: EACCES: permission denied, mkdir '/.npm'
我什至尝试添加sudo命令
sh 'sudo npm --version'
但是然后它给我没有sudo发现的错误。 我们如何从Jenkinsfile授予docker内部权限,当前的unix用户是我也已添加到sudoers中的jenkins。 当我运行Jenkins文件时,我可以看到它使用-u选项将jenkins用户和组传递给了docker。
docker run -t -d -u 109:116 -w /var/lib/jenkins/testapp
问题与npm尝试将其缓存写入/.npm文件夹有关。 由于使用-u标志运行容器,因此您运行的用户不是root用户(默认)。 在Linux机器上,默认情况下,非root用户无法在/中创建新目录。
您可以选择几种方法来解决问题:
我认为选项2是最简单的,只需在构建脚本中的npm install之前运行以下命令:
export HOME=/tmp ; npm config set cache /tmp
同样,npm将其配置存储到用户的主目录中。 由于您使用的用户不存在于容器中,因此其主目录设置为/。 为了避免出现写权限错误,请尝试将HOME env变量也设置为/ tmp。 您的安装命令变为:
export HOME=/tmp ; npm --prefix ./Server install
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.