Jenkins里面的Docker代理 - npm"找不到模块"

时间:2017-10-25 08:04:38

标签: node.js docker jenkins jenkins-pipeline

我正致力于以下构建步骤的自动化: - 使用webpack构建前端应用程序 - 运行测试

我正在使用启用了蓝洋插件的Jenkins,这里是 Jenkinsfile

Jenkinsfile:pipeline {
  agent {
    dockerfile {
      filename 'Dockerfile'
    }

  }
  stages {
    stage('Build') {
      steps {
        sh 'npm run build'
      }
    }
  }
}

我使用了以下 Dockerfile

FROM node:latest

WORKDIR /app
COPY . /app

RUN npm install webpack -g && npm install

问题是,当运行npm run build时,它无法找到webpack:

> webpack --config webpack-production.config.js --progress --colors

module.js:529
    throw err;
    ^

Error: Cannot find module 'webpack'
    at Function.Module._resolveFilename (module.js:527:15)
    at Function.Module._load (module.js:476:23)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/var/lib/jenkins/workspace/l-ui-webpack-example_master-IXSLD4CQSVAM2DRFHYHOYUANEHJ73R5PUGW4BMYVT5WPGB6ZZKEQ/webpack-production.config.js:1:79)

看起来命令正在主机上下文中执行,而不是在容器上执行,因为手动运行工作正常:

docker build . -t sample
docker run sample npm run build

这是完整的詹金斯日志:Jenkins build log 以下是存储库的链接:Source code

1 个答案:

答案 0 :(得分:0)

我有完全一样的问题。出于某种原因,虽然在手动构建映像时效果很好,但Dockerfile中的“ RUN npm install”在Jenkins管道中并未生效。

我通过运行“ npm install”作为管道中的步骤来使管道正常工作。因此,在“构建”阶段之前将其添加到您的Jenkinsfile中:

stage ('install app') {
    steps {
        sh "npm install"
    }
}

我不知道为什么会这样,但可能与Jenkins如何设置Docker构建的上下文有关。我希望其他人可以对此进行详细说明。