docker - Jenkins 管道中的 npm 安装失败

标签 docker jenkins npm jenkins-pipeline

我创建了一个 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"]

最佳答案

找到了类似问题的解决方法。

问题

  • Jenkins 正在运行管道作业
  • 此作业正在 debian slim 容器内运行命令
  • 所有命令都会立即失败,没有错误输出,只有错误:脚本返回退出代码 -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 上找到了答案:https://issues.jenkins-ci.org/browse/JENKINS-35370以及 Jenkins Docker Pipeline Exit Code -1

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

apt-get install -y procps

关于docker - Jenkins 管道中的 npm 安装失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43818327/

相关文章:

python - 如何配置 Jenkins ShiningPanda 插件 Python 安装

java - 如何解析 Windows 与 Linux 属性文件路径?

.net - Jenkins 构建错误 - MSBUILD : error MSB1009: Project file does not exist

node.js - 安装 Drywall 时我遇到了 Bcrypt 问题

css - sass 文件不是由 gulp 编译的

docker - Docker:对apache虚拟主机进行Docker化

docker - 获取官方 Docker 镜像列表

linux - 从容器内将文件从主机复制到正在运行的 docker 容器?

bash - 使用输入参数从kubernetes运行python脚本

react-native - 创建 React Native 项目时出现 npm 错误