繁体   English   中英

詹金斯管道的docker容器内的sudo权限

[英]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用户无法在/中创建新目录。

您可以选择几种方法来解决问题:

  1. 通过删除-u选项以root用户身份运行容器(这意味着npm将由root用户运行,这可能会导致安全问题)
  2. 将npm缓存路径更改为非特权用户可以在其中写入的文件夹,例如/ tmp
  3. 使用自定义docker映像代替默认节点之一,在该默认节点上创建/.npm目录并向非特权用户授予写权限。

我认为选项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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM