首页 文章

Jenkins管道中的npm安装失败

提问于
浏览
3

我创建了一个docker镜像,可以运行node> = 7.9.0和monogodb在Jenkins中进行测试 . 有些人可能会说使用mongodb进行测试不是正确的方法,但应用程序广泛使用它,我有一些复杂的更新和删除所以我需要它 .

Docker文件位于我的github repo中的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"]

2 回答

  • 2

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

    Problem

    • Jenkins正在运行管道工作

    • 这个工作是在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
    }
    

    Solution

    在Jenkins bugtracker上找到答案:https://issues.jenkins-ci.org/browse/JENKINS-35370Jenkins Docker Pipeline Exit Code -1

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

    apt-get install -y procps
    
  • 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问题,这将使未来更加清洁 .

相关问题