我创建了一个Docker镜像,以便在Jenkins中测试使用Node >= 7.9.0和MongoDB。有些人可能会认为使用mongodb进行测试不是正确的方法,但应用程序广泛使用它,并且我需要进行一些复杂的更新和删除操作,因此需要它。
Docker文件位于我的Github仓库的dockerfiles/test/Dockerfile下。使用pipeline语法时,Docker镜像可以成功构建,但是我不能在pipeline步骤中执行sh 'npm install' 或 sh 'npm -v'。 Docker镜像已经过测试,如果我在本地构建并运行它,则可以在其中进行npm安装。 sh 'node -v'在pipeline中成功运行,也可以运行sh 'ls'。
以下是pipeline语法。
我遇到了这个错误:ERROR: 脚本返回退出码-1。我在这里看不出任何问题。我还使用其他具有相同结果的node镜像进行了测试。如果我使用node从机运行它,我可以进行安装,但我不想有很多不同的从机来完成集成测试的设置。
以下是dockerfile代码:
Docker文件位于我的Github仓库的dockerfiles/test/Dockerfile下。使用pipeline语法时,Docker镜像可以成功构建,但是我不能在pipeline步骤中执行sh 'npm install' 或 sh 'npm -v'。 Docker镜像已经过测试,如果我在本地构建并运行它,则可以在其中进行npm安装。 sh 'node -v'在pipeline中成功运行,也可以运行sh 'ls'。
以下是pipeline语法。
pipeline {
agent { dockerfile { dir 'dockerfiles/test' } }
stages {
stage('Build') {
steps {
sh 'npm install'
}
}
}
post {
always {
echo 'I will always say Hello again!'
}
}
}
我遇到了这个错误:ERROR: 脚本返回退出码-1。我在这里看不出任何问题。我还使用其他具有相同结果的node镜像进行了测试。如果我使用node从机运行它,我可以进行安装,但我不想有很多不同的从机来完成集成测试的设置。
以下是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
需要一个有效的用户和主目录。由于 Jenkins 以 Jenkins 用户身份运行容器,因此这些可能不存在。你的npm install
可能使用需要有效用户和主目录的 SSH(或其他内容),但这些在 Dockerfile 中可能不存在。有关用户问题,可以参考 JENKINS-38438。 - mkobit