【发布时间】:2017-10-04 17:24:36
【问题描述】:
我创建了一个 docker 镜像,以便能够运行 node >= 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。我在这里看不出有什么问题。我还用其他节点图像进行了测试,结果相同。如果我使用节点从属服务器运行它,我可以进行安装,但我不希望有许多不同的从属服务器,并且有很多用于集成测试的设置。
这里是 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"]
【问题讨论】:
-
npm install是本地命令。尝试在您的 Jenkinsfile 中使用dir来选择您希望运行该命令的目录。 -
@MattSchuchard 谢谢,但我在正确的目录中。执行 ls 时,我可以看到我的 package.json 和源文件。
-
我的猜测是容器中没有有效的用户,而您的
npm install需要有效的用户和主目录,并且由于 Jenkins 以 Jenkins 用户身份运行容器,因此这些可能不存在。您的npm install可能使用需要有效用户和主目录的 SSH(或其他东西),但这些可能不存在于您的 Dockerfile 中。用户问题有JENKINS-38438。 -
@mkobit 谢谢!但我已经在我的 docker 文件中将用户设置为 Jenkins,但事实并非如此
-
你能发布一个导致你的问题的最小 Dockerfile 吗?
标签: docker jenkins npm jenkins-pipeline