在 Jenkins 中构建成功,但 AWS-Codebuild 给出插件错误

Posted

技术标签:

【中文标题】在 Jenkins 中构建成功,但 AWS-Codebuild 给出插件错误【英文标题】:Build is successful in Jenkins but AWS-Codebuild is giving plugin error 【发布时间】:2017-10-29 08:55:35 【问题描述】:

我有一个在 Jenkins 上成功构建的项目,但是当我尝试使用 AWS Codebuild 构建时,它给出了一个插件错误。该项目基本上是一个 NodeJS 和 ReactJS 项目。我们不想迁移到 Jenkins,因为我们是无服务器的,安装 jenkins 需要一个 EC2 实例。我们不想维护任何服务器。我已经为 AWS 代码构建尝试了以下环境:

aws/codebuild/ubuntu-base:14.04
aws/codebuild/nodejs:6.3.1
aws/codebuild/nodejs:7.0.0
aws/codebuild/nodejs:4.4.7

我的 buildspec.yml 的前四个命令只有在我使用aws/codebuild/ubuntu-base:14.04 codebuild 环境时才会执行。否则只有最后三个命令是我的 buildspec.yml 的一部分

下面是我的 buildspec.yml

version: 0.1

phases:
  build:
    commands:
      - sudo apt-get update 
      - curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
      - sudo apt-get install -y nodejs
      - sudo apt-get install -y build-essential
      - npm install
      - npm run dev
      - aws s3 cp --recursive dist/ s3://$AWS_BUCKET_NAME/ --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers

以下是我在 npm 运行期间在 AWS codebuild 中的错误日志

ERROR in 
Child html-webpack-plugin for "index.html":
+ 3 hidden modules

另外,我在 Codebuild 中的 npm install 期间收到以下警告,但我在 Jenkins 中没有收到此警告

npm WARN deprecated babel-plugin-react-hot@1.0.4: This plugin is no longer maintained. Please use babel-plugin-react-transform with react-transform-hot-reload instead.

下面是我的 webpack.config.js

var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var FlowStatusWebpackPlugin = require('flow-status-webpack-plugin');

module.exports = 
    entry: [
        './src/app/index.js'
    ],
    output: 
        path: __dirname + '/dist',
        filename: 'index_bundle.js'
    ,
    module: 
        loaders: [
            
                test: /\.json$/,
                loader: 'json'
            ,
            
                test: /\.js$/,
                exclude: /(node_modules|test)/,
                loaders: ["babel-loader"]
            ,
            
                test: /\.(css|scss)$/,
                loaders: ['style', 'css', 'sass-loader']
            ,
            
                test: /\.(png|woff|woff2|eot|ttf|svg)$/,
                loader: 'url-loader',
                options: 
                    limit: 100000,
                    name: 'assets/[hash].[ext]'
                
            ,
            
                test: /\.styl$/,
                loader: 'style-loader!css-loader!postcss-loader!stylus-loader'
            
        ]
    ,
    plugins: [
        new HtmlWebpackPlugin(
            template: __dirname + '/src/app/index.html',
            filename: 'index.html',
            inject: 'body'
        ),
        new webpack.ProvidePlugin(
            $: "jquery",
            jQuery: "jquery"
        ),
        new webpack.DefinePlugin(
            "process.env": 
                'NODE_ENV': JSON.stringify('dev')
            
        ),
        new FlowStatusWebpackPlugin(
            failOnError: true
        )
    ],
    devtool: 'source-map',
    node: 
        tls: "empty",
        fs: "empty"
    ,
    resolve: 
        root: path.resolve(__dirname),
        alias: 
            '~': 'src',
        ,
        extensions: ['', '.js', '.jsx']
    ,
;

【问题讨论】:

您好,只是检查一下,您希望在哪里托管网站(构建后的结果)?查看构建规范,我猜您正在尝试将它托管在 S3 中? 是的,它托管在 S3 中。 @Riku Amazon S3 不支持服务器端脚本。你不能在那里托管 NodeJS 代码。 docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html 意味着您的构建应该只运行输出最终完全静态版本的网站并将这些文件上传到 S3 的命令。含义例如npm run 不应该是构建过程的一部分。 我正在尝试仅上传最终的静态版本。 npm run 创建一个文件夹 dist/ 并将该文件夹(静态站点)的内容上传到 S3。当我从詹金斯构建时,它工作得很好。但是 Codebuild 显示错误。 @Riku 好的,这是 webpack 错误的完整错误堆栈跟踪吗? “index.html”的子 html-webpack-plugin 中的错误:+ 3 个模块 【参考方案1】:
new HtmlWebpackPlugin(
  template: __dirname + '/src/app/index.html',
  filename: 'index.js',
  inject: 'body'
)

filename 选项应该是一个 javascript 文件?即:filename: index.js

【讨论】:

以上是关于在 Jenkins 中构建成功,但 AWS-Codebuild 给出插件错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Grafana 中构建显示 Jenkins 作业状态的仪表板?

使用Jenkins Sonar插件构建成功后,Sonar没有显示代码覆盖率

Spring Boot 应用程序本地构建通过,但由于测试在 Jenkins 中失败

Jenkins-如果测试失败,即使构建通过,也要查看任何失败图标

Fastlane iOS 测试在本地通过,但不是来自 Jenkins

jenkins显示发送邮件成功,但未收到邮件