Kri*_*hna 2 node.js docker 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'
Run Code Online (Sandbox Code Playgroud)
我什至尝试添加sudo命令
sh 'sudo npm --version'
Run Code Online (Sandbox Code Playgroud)
但是然后它给我没有sudo发现的错误。我们如何从Jenkinsfile授予docker内部权限,当前的unix用户是我也已添加到sudoers中的jenkins。当我运行Jenkins文件时,我可以看到它使用-u选项将jenkins用户和组传递给了docker。
docker run -t -d -u 109:116 -w /var/lib/jenkins/testapp
Run Code Online (Sandbox Code Playgroud)
问题与npm尝试将其缓存写入/.npm文件夹有关。由于使用-u标志运行容器,因此您运行的用户不是root用户(默认)。在Linux机器上,默认情况下,非root用户无法在/中创建新目录。
您可以选择几种方法来解决问题:
我认为选项2是最简单的,只需在构建脚本中的npm install之前运行以下命令:
export HOME=/tmp ; npm config set cache /tmp
Run Code Online (Sandbox Code Playgroud)
同样,npm将其配置存储到用户的主目录中。由于您使用的用户不存在于容器中,因此其主目录设置为/。为了避免出现写权限错误,请尝试将HOME env变量也设置为/ tmp。您的安装命令变为:
export HOME=/tmp ; npm --prefix ./Server install
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1747 次 |
| 最近记录: |