环境:
为大家介绍大家原先的编码上线流程:最先公布仓和编码仓(dev和master支系相匹配评估和工作环境)单独,每一次修补或增加作用,最先需要提供修改到编码仓(fork),随后装包编码,在发仓pull后清仓处理,将装包代码复制进去commit,push,然后再去相匹配自然环境获取编码;
做为“注意力不集中病癌晚期”病人,常常一个代码的修改装包发布必须5min ,且大多数时长消耗到了没有意义窝里斗上,故拟计划方案文本文档:
文中仅详细介绍前面一部分,后面一部分阅读者可寻求帮助自身企业的后端朋友
前期准备工作
- 查验装包文件夹名称是不是在.gitignore设置权限忽视,要是没有必须再加上
- 删掉原先的装包文件夹名称,将公布仓移进编码仓并改名为装包文件夹名字(如dist)
- 检验公布仓和编码仓git登陆密码是否存在储存,要是没有必须再加上
- 网站根目录创建文件夹middeware,包括js文档:shell指令封装形式 sh.js ,自动打包递交 ci.js,自动打包 build.js,自动提交 push.js
- pnpm install shelljs (不禁止使用pnpm或是npm还是cnpm这些,自己习惯性应用pnpm)
- package.json内配备装包时不消除装包文件夹名称及常见的ci指令(见下图)
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…