公布仓和编码仓(dev和master支系相匹配评估和工作环境

lxf2023-02-16 15:49:24

环境:

为大家介绍大家原先的编码上线流程:最先公布仓和编码仓(dev和master支系相匹配评估和工作环境)单独,每一次修补或增加作用,最先需要提供修改到编码仓(fork),随后装包编码,在发仓pull后清仓处理,将装包代码复制进去commit,push,然后再去相匹配自然环境获取编码;

做为“注意力不集中病癌晚期”病人,常常一个代码的修改装包发布必须5min ,且大多数时长消耗到了没有意义窝里斗上,故拟计划方案文本文档

公布仓和编码仓(dev和master支系相匹配评估和工作环境

文中仅详细介绍前面一部分,后面一部分阅读者可寻求帮助自身企业的后端朋友

前期准备工作

  1. 查验装包文件夹名称是不是在.gitignore设置权限忽视,要是没有必须再加上
  2. 删掉原先的装包文件夹名称,将公布仓移进编码仓并改名为装包文件夹名字(如dist)
  3. 检验公布仓和编码仓git登陆密码是否存在储存,要是没有必须再加上
  4. 网站根目录创建文件夹middeware,包括js文档:shell指令封装形式 sh.js ,自动打包递交 ci.js,自动打包 build.js,自动提交 push.js
  5. pnpm install shelljs (不禁止使用pnpm或是npm还是cnpm这些,自己习惯性应用pnpm)
  6. package.json内配备装包时不消除装包文件夹名称及常见的ci指令(见下图)

公布仓和编码仓(dev和master支系相匹配评估和工作环境

It is real show time!

最先封装形式经常使用的shell指令

/*
 * sh.js
 * @Descripttion: shell指令
 */
const sh = require('shelljs')

/**
 * @description                             实行shell指令
 * @param {String}      params              指令
 * @returns
 */
 const exec = params => {
    return new Promise((resolve, reject) => {
        const code = sh.exec(params).code
        if (code !== 0) {
            reject()
        } else {
            resolve()
        }
    })
}

/**
 *
 * @description                             进到文件夹名称
 * @param {String}      params              详细地址
 * @returns
 */
const cd = params => {
    return new Promise((resolve, reject) => {
        const code = sh.cd(params).code
        if (code !== 0) {
            reject()
        } else {
            resolve()
        }
    })
}

/**
 * @description                              删掉实际操作
 * @param {String}      params               文件或文件夹名字
 * @returns
 */
const rm = params => {
    return new Promise((resolve, reject) => {
        const code = sh.rm('-rf', params).code
        if (code !== 0) {
            reject()
        } else {
            resolve()
        }
    })
}

module.exports = {
    exec,
    cd,
    rm
}

编码仓自动提交作用

/*
 * push.js
 * @Descripttion: 自动提交
 */
const { exec } = require('./sh');

// 装包
const push = async () => {

    // 支系
    let branch = process.argv.length>2? process.argv[2]:'master' ;

    const log =  process.argv.length>3? process.argv[3]:'auto push at ' new Date();

    try {
        // 消息推送支系编码
        await exec(`git status`);
        await exec(`git add .`);
        await exec(`git commit -m "${log}  #FromAutoSubmit"`);
        await exec(`git pull origin master`);
        await exec(`git push fork ${branch}`);
        console.log('git done');
    } catch (error) {
        console.log(error, 'git error');
    }
}

push()

自动打包作用

/*
 * build.js
 * @Descripttion: 自动打包递交
 */
const { resolve } = require('path')
const { exec, cd, rm } = require('./sh')

// 装包
const build = async () => {
//  装包文件目录
    const path = 'dist'
    const outPath = resolve('./')

    // ENV 自然环境 env 自然环境全名
    let ENV = process.argv.length>2? process.argv[2]:'dev',env='development';
    if(ENV == 'prod') env = 'production';

    const log =  process.argv.length>3? process.argv[3]:'auto push at ' new Date();
    const branch = env=='development'?'dev':'master'
    await cd(path)
    try {
        console.log("逐渐获取");
        // 转换支系并获取编码
        await exec(`git checkout .`)
        console.log(`git checkout .`)
        await exec(`git checkout ${branch}`)
        console.log(`git checkout ${branch}`)
        await exec(`git pull origin ${branch}`)
        console.log(`git pull origin ${branch}`)
    } catch (error) {
        console.log(error, 'git error')
    }

    try {
        // 手动式删掉dist下边的文件夹名称或文档
        await rm('css')
        await rm('img')
        await rm('js')
        console.log(`rm css img js`)
    } catch (error) {
        console.log(error, 'rm error')
    }

    await cd(outPath);
// 实行装包
await exec(`pnpm run build:${ENV}`);
await cd(path)
    try {
        // 消息推送支系编码
        await exec(`git add .`)
        await exec(`git commit -m "${log}  #FromAutoSubmit"`)
        await exec(`git push origin ${branch}`)
        console.log('git done')
    } catch (error) {
        console.error(error, 'error')
    }
    await cd(outPath)
}

build()

自动提交和装包

/*
 * ci.js
 * @Descripttion: 自动打包
 */
const { exec } = require('./sh');

// 自动打包
const ci = async () => {

    // ENV 自然环境 env 自然环境全名
    let ENV = process.argv.length>2? process.argv[2]:'dev',env='development';
    if(ENV == 'prod') env = 'production';
    const branch =  process.argv.length>3? process.argv[3]:'dev';
    const log = process.argv.length > 4 ? process.argv[4] : 'auto push at '   new Date();

    try {
        await exec(`pnpm run ci:build "${ENV}" "${log}  #FromAutoSubmit"`);
        await exec(`pnpm run ci:push "${branch}" "${log}  #FromAutoSubmit"`);
    } catch (error) {
        console.log(error, '实行出差错,请确认');
    }
}

ci()

有关指令

    pnpm run ci [env] [branch] [commit log]          装包提交代码仓和发布仓
    pnpm run ci:build [env] [commit log]             装包递交公布仓
    pnpm run ci:push [branch] [commit log]           提交代码仓

汇总

以上就是关于前面当地自动化技术递交的全部内容了,阅读者发布规范流程很有可能和本人不一致,可根据实际情况变更指令。

注:文中的技术进行一定程度上借鉴了gitee.com/liuziwei121…