【发布时间】:2017-08-02 06:18:53
【问题描述】:
我正在学习有关 Jenkins 管道的教程,我可以在节点 6.10 docker 容器下获得一个“hello world”。
但是,当我将默认的 EmberJS 应用程序(使用 ember init)添加到存储库并尝试在管道中构建它时,运行 npm install 时它会失败(因为目录访问问题)。 Jenkinsfile 可以在这里看到:https://github.com/CloudTrap/pipeline-tutorial/blob/fix-build/Jenkinsfile
构建打印的错误消息是(在本地安装并在 Macbook 上使用 java -jar jenkins.war 运行,不相关但包括在内以防万一)是:
npm ERR! Linux 4.9.12-moby
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v6.10.0
npm ERR! npm v3.10.10
npm ERR! path /.npm
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir
npm ERR! Error: EACCES: permission denied, mkdir '/.npm'
npm ERR! at Error (native)
npm ERR! { Error: EACCES: permission denied, mkdir '/.npm'
npm ERR! at Error (native)
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'mkdir',
npm ERR! path: '/.npm',
npm ERR! parent: 'pipeline-tutorial' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
注意:我想不以 root / sudo 身份运行 npm install。
更新:我已经能够取得如下一些进展:
我从日志中找到了 Jenkins 使用容器构建的命令:
[Pipeline] withDockerContainer
$ docker run -t -d -u 501:20 -w /long-workspace-directory -v /long-workspace-directory:/long-workspace-directory:rw -v /long-workspace-directory@tmp:/long-workspace-directory@tmp:rw -e
所以当 docker 镜像运行时,它的工作目录是 /long-workspace-directory(这真的是一个看起来很神秘的 jenkins 工作空间路径),用户 id 是 501(组 id 20)等等。用户没有名字(这显然破坏了与这个问题无关的其他事情)。
-
将代理更改为使用 Dockefile:
agent { dockerfile { filename 'Dockerfile' args '-v /.cache/ -v /.bower/ -v /.config/configstore/' } } 指定
args '-v ...'为 npm install / bower 需要的目录创建卷。
【问题讨论】:
-
npm ERR! Please try running this command again as root/Administrator.试试这个提示。 -
通常情况下,您不会以 root 身份运行
npm install;它被认为是非常糟糕的形式;我想避免这种情况。 -
请看nvm
-
我没有安装任何全局依赖项。我在工作中和我们现有的 ci 设置中广泛使用 nvm。
-
我认为我使用的图像不正确。节点映像用于运行节点服务器应用程序,而不是运行一系列构建命令。
标签: docker jenkins ember.js npm jenkins-pipeline