我创建了一个docker镜像,可以运行节点> = 7.9.0和monogodb在Jenkins中进行测试。有些人可能会说使用mongodb测试不是正确的方法,但应用程序广泛使用它,我有一些复杂的更新和删除所以我需要它。
Docker文件位于我的github仓库中的dockerfiles / test / Dockerfile下。使用管道语法时,docker镜像已成功构建,但我无法在管道的步骤中执行sh'npm install'或sh'npm -v'。测试了docker镜像,如果我在本地构建并运行它,我可以在那里进行npm安装。 sh'node -v'在管道中成功运行,也是sh'ls'。
这是管道语法。
pipeline {
agent { dockerfile { dir 'dockerfiles/test' } }
stages {
stage('Build') {
steps {
sh 'npm install'
}
}
}
post {
always {
echo 'I will always say Hello again!'
}
}
}
我收到此错误:错误:脚本返回退出代码-1。我在这里看不出任何错误。我也用其他节点图像测试了相同的结果。如果我用节点slave运行它我可以进行安装,但我不想让很多不同的slave有很多集成测试设置。
这是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"]
答案 0 :(得分:2)
找到解决类似问题的方法。
<强>问题强>
ERROR: script returned exit code -1
从Jenkinfile中提取:
androidImage = docker.build("android")
androidImage.inside('-u root') {
stage('Install'){
sh 'npm install' // is failing with generic error and no output
}
解决方案
在Jenkins bugtracker上找到答案:https://issues.jenkins-ci.org/browse/JENKINS-35370和Jenkins Docker Pipeline Exit Code -1
通过在我的debian Dockerfile中安装procps包解决了我的问题:
apt-get install -y procps
答案 1 :(得分:0)
我尽可能忠实地复制你的设置。我使用了你的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
构建过去了。感谢@mkobit密切关注这个问题并链接到jenkins问题,这将使这个问题在未来变得更加清洁。