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问题联系到一起,使未来更加清洁。