Jenkinspipe道中的npm安装失败

我已经创build了一个docker镜像,能够运行node> = 7.9.0和monogodb在Jenkins中进行testing。 有些人可能会说,使用mongodb进行testing不是正确的方法,但应用程序广泛使用它,我有一些复杂的更新和删除,所以我需要在那里。

Docker文件在我的github仓库中的dockerfiles / test / Dockerfile下。 在使用stream水线语法时,docker映像已经成功创build,但是我不能在stream水线的步骤中执行sh'npm install'或sh'npm -v'。 docker的图像进行了testing,如果我在本地构build并运行它,我可以在那里做npm安装。 sh'node -v'在pipe道中成功运行,同时也是sh'ls'。

这是pipe道语法。

pipeline { agent { dockerfile { dir 'dockerfiles/test' } } stages { stage('Build') { steps { sh 'npm install' } } } post { always { echo 'I will always say Hello again!' } } } 

我得到这个错误:错误:脚本返回退出代码-1。 我在这里看不到任何错误。 我也用相同的结果testing了其他节点图像。 如果我用一个节点从站运行它,我可以进行安装,但是我不希望有许多不同的从站有很多用于集成testing的设置。

这里是dockerfile

 FROM ubuntu:16.04 ENV DEBIAN_FRONTEND noninteractive RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 RUN echo "deb http://repo.mongodb.org/apt/ubuntu $(cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2)/mongodb-org/3.2 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-3.2.list RUN apt-get update && apt-get install -y \ curl && \ curl -sL https://deb.nodesource.com/setup_7.x | bash - && \ apt-get install -y nodejs && \ apt-get install -y mongodb-org RUN mkdir -p /data/db RUN export LC_ALL=C RUN groupadd -g 1000 jenkins && useradd -u 1000 jenkins -g jenkins EXPOSE 27017 CMD ["/usr/bin/mongod"] 

find一个类似的问题的解决方法。

问题

  • jenkins运行pipe道工作
  • 这个工作是在debian slim容器内运行命令
  • 所有命令都立即失败,没有错误输出,只有一个ERROR: script returned exit code -1
  • 在Docker外部运行容器并使用相同的用户执行相同的命令正在运行

从Jenkinfile提取:

 androidImage = docker.build("android") androidImage.inside('-u root') { stage('Install'){ sh 'npm install' // is failing with generic error and no output } 

在Jenkins bugtracker上find答案: https : //issues.jenkins-ci.org/browse/JENKINS-35370和Jenkins Docker Pipeline Exit Code -1

我的问题是通过在我的debian Dockerfile中安装procps包来解决的:

 apt-get install -y procps 

我尽可能忠实地复制你的设置。 我用你的Dockerfile和Jenkinsfile,这里是我的package.json:

 { "name": "minimal", "description": "Minimal package.json", "version": "0.0.1", "devDependencies": { "mocha": "*" } } 

它在npm安装过程中对我来说是失败的:

 npm ERR! Error: EACCES: permission denied, mkdir '/home/jenkins' 

我更新了Dockerfile中的一行以添加--create-home

 RUN groupadd -g 1000 jenkins && useradd -u 1000 jenkins -g jenkins --create-home 

而构build通过。 感谢@mkobit在这个问题上的关键,并将jenkins问题联系到一起,使未来更加清洁。