jenkins创建应用和实操处理问题

1,930 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第29天,点击查看活动详情

jenkins创建应用

1.登录到jenkins,选择新建任务,先创建一个文件夹

image-20220412103727677.png

2.创建文件夹,并进行配置,使用默认配置即可

image-20220412104026816.png

3.进入文件夹,然后新建item

image-20220412104458892.png

image-20220412104213780.png

4.新建item,然后选择构建一个自由风格的软件项目

image-20220412104657608.png

5.配置General

image-20220412110802128.png

6.源码管理

image-20220412110921230.png

7.构建,选择执行shell

image-20220412111145916.png

image-20220412111225347.png

8.保存,立即构建

image-20220412111407172.png

jenkins问题处理

1.Module not found: Error: Can't resolve '../EventDemo'

出现这样的问题,你得查看你的代码引入EventDemo这个,有无大小写的区分!!!

就是说,你的文件名是eventDemo,但是你引入这个文件的时候,用的是import EventDemo from '../EventDemo'(大写),这个是有问题的!!!

为什么呢?

是因为在window下,是不区分大小写的。但是在linux下,是区分大小写的,这是个恶心的问题!!!

所以这里得改成这样:import EventDemo from '../eventDemo'

2.入口entry的main.js,扫描会有问题

function getEntries() {
    const pagesPath = path.resolve('./src/pages')
    var result = fs.readdirSync(path.resolve('./src/pages'))
    var entry = {};
    result.forEach(item => {
        entry[item] = `./src/pages/${item}/main.js`
    })
    return entry
}

为什么上面的会有问题呢?

因为我们的代码,一般是通过git或者svn进行管理,jenkins是通过拉取这些仓库上面的代码,进行构建打包的。

那就会有下面的代码结构:

image-20220422093337679.png

会for循环,去找src/pages下面的文件夹,然后找里面的main.js文件。

那么就会找.svn文件夹下面的main.js,可是这里面是没有的,那不就完蛋了嘛?直接构建失败了呀!!!

所以这里得忽略这个文件夹的扫描:如下修改即可

function getEntries() {
    const pagesPath = path.resolve('./src/pages')
    var result = fs.readdirSync(path.resolve('./src/pages'))
    var entry = {};
    result.forEach(item => {
        //忽略svn的扫描
        if(item.indexOf('svn')>=0){
            return;
        }
        entry[item] = `./src/pages/${item}/main.js`
    })
    return entry
}

3. Can't resolve 'baidutemplate'

一看到这个问题,我们就联想到问题1,是不是大小写的问题呢?

但好像不是,模块的名称,确实是baidutemplate

然后,去看一下该baidutemplate模块的内容,如下:

image-20220422102156964.png

那就分析一下了:我们引用是这样的:

import baidu from 'baidutemplate'

这样在window下面,运行打包,是没有问题的。

为什么在Jenkins(linux)上打包,就有问题?

我们可以看到baidutemplate模块的内容,这里就一个实用的js文件baiduTemplate.js

那会不会是这样:

import baidu from 'baidutemplate'其实就相当于import baidu from 'baidutemplate/baidutemplate'

那这个在window(不区分大小写)下是没有问题,在Linux(区分大小写)下,就不行了!!!

那我们来改一下,改成这样:

import baidu from 'baidutemplate/baiduTemplate'

好了,Jenkins试一下打包!!!

测试无问题,问题解决!!!

4.JavaScript heap out of memory

出现这个错,咋们第一时间,肯定是会想到oom堆内存不够了。

  • 网上大多数的做法,都是这样改:

编译使用的是 vue-cli-service 执行的编译。

我们在node_modules.bin 目录找到 vue-cli-service.cmd 文件。

attach_162eb41a3b1393c4.png

window下这么改,是没啥问题。

可问题来了,在linux上,这个文件vue-cli-service.cmd和window下,是完全不一样的。

  • linux下,vue-cli-service是这样的
#!/usr/bin/env nodeconst semver = require('semver')
const { error } = require('@vue/cli-shared-utils')
const requiredVersion = require('../package.json').engines.nodeif (!semver.satisfies(process.version, requiredVersion)) {
  error(
    `You are using Node ${process.version}, but vue-cli-service ` +
    `requires Node ${requiredVersion}.\nPlease upgrade your Node version.`
  )
  process.exit(1)
}
​
const Service = require('../lib/Service')
const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
​
const rawArgv = process.argv.slice(2)
const args = require('minimist')(rawArgv, {
  boolean: [
    // build
    'modern',
    'report',
    'report-json',
    'inline-vue',
    'watch',
    // serve
    'open',
    'copy',
    'https',
    // inspect
    'verbose'
  ]
})
const command = args._[0]
​
service.run(command, args, rawArgv).catch(err => {
  error(err)
  process.exit(1)
})

那完全不知道怎么改了,一时之间,头有点蒙

它和window下的,完全不一样的。网上也找不到,如何对上面的代码进行修改。

网上找了,有很多种解决方式,有些要安装依赖有些要修改某些文件

可最终的效果,都不咋地,并不能很友好的解决这个问题!!!

最终找到了一种,修改地方很少的方式!!!

最终的解决方式如下:

image-20220429230308190.png

export NODE_OPTIONS="--max-old-space-size=8192"
npm install 
npm run build

好了,Jenkins试一下打包!!!

测试无问题,问题解决!!!

image-20220422103710362.png

今天就先到这里了,溜了溜了溜了!!!^_^

觉得有收获的,帮忙点个赞呗!!!

image.png