在使用 Docker 代理运行 Jenkins 并执行 npm install 时,出现了 "EACCES: permission denied" 的错误提示。

3
我创建了一个简单的Node.js项目,其中包含一个Jenkinsfile文件,其内容如下:
pipeline {
  agent { docker { image 'node:12-alpine' } }
  stages {
    stage('build') {
      steps {
        sh 'npm install'
      }
    }
    stage('test') {
      steps {
        sh 'npm run test'
      }
    }
  }
}

Jenkins服务由名为“jenkins”的用户运行,由于之前的权限问题(尝试连接Docker守护程序时出现权限被拒绝),我已将该用户添加到Docker用户组中,并且我已经在Jenkins中安装了Docker插件。

但是当我运行构建作业时,我会收到以下错误消息并且构建失败。

EACCES: permission denied, mkdir '/.npm'   

如果我使用

agent any

在Jenkinsfile中,我没有遇到所提到的错误。但我想要使用docker代理。
为什么会这样?我有什么漏掉的吗?
1个回答

2
用户无法在默认的缓存目录中写入,您可以在管道开头使用此环境变量来覆盖它:
environment {
    NPM_CONFIG_CACHE = "${WORKSPACE}/.npm"
}

那个有效,谢谢。我最近发现Jenkins通过docker run命令的-u选项自动将容器用户设置为运行Jenkins的用户,因此该用户无法在工作区以外的任何地方进行写入访问。 - ali2966
1
这对我没有用,我必须像这个答案中所述一样在docker标记中添加args '-u root:root'。https://stackoverflow.com/a/62330483/2155645 - FourtyTwo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接