This commit is contained in:
KeiferJu 2020-08-18 20:34:33 +08:00
parent e06f988828
commit 2193936275
2 changed files with 82 additions and 43 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "@dllcn/auto-deploy", "name": "@dllcn/auto-deploy",
"version": "1.1.1", "version": "1.1.2",
"description": "自动部署脚本", "description": "自动部署脚本",
"main": "upload.js", "main": "upload.js",
"scripts": { "scripts": {

View File

@ -26,21 +26,25 @@ let config; // 用于保存 inquirer 命令行交互后选择正式|测试版的
//logs //logs
const defaultLog = log => console.log(chalk.blue(`---------------- ${log} ----------------`)); const defaultLog = log => console.log(chalk.blue(`---------------- ${log} ----------------`));
const errorLog = log => console.log(chalk.red(`---------------- ${log} ----------------`)); const errorLog = log => console.log(chalk.red(`---------------- ${log} ----------------`));
const successLog = log => console.log(chalk.green(`---------------- ${log} ----------------`)); const successLog = log => console.log(chalk.green(`---------------------- OK ----------------------`));
const endLog = log => console.log(chalk.green(`--------------- ${log} ---------------`));
//文件夹目录 //文件夹目录
const distZipPath = path.resolve(__dirname, `${pathHierarchy}../smx-bundle.tar.gz`); //打包后地址(smx-bundle.tar.gz是文件名,不需要更改, 主要在config中配置 PATH 即可) const distZipPath = path.resolve(__dirname, `${pathHierarchy}../smx-bundle.tar.gz`); //打包后地址(smx-bundle.tar.gz是文件名,不需要更改, 主要在config中配置 PATH 即可)
//项目打包代码 npm run build /**
* 项目打包
* @returns {Promise<void>}
*/
const compileDist = async () => { const compileDist = async () => {
const loading = ora(defaultLog('项目开始打包')).start() const loading = ora(defaultLog('正在进行项目打包')).start()
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4'] loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
shell.cd(path.resolve(__dirname, pathHierarchy)) shell.cd(path.resolve(__dirname, pathHierarchy))
const res = await shell.exec(config.BUILD_SHELL) //执行shell 打包命令 const res = await shell.exec(config.BUILD_SHELL) //执行shell 打包命令
loading.stop() loading.stop()
if (res.code === 0) { if (res.code === 0) {
successLog('项目打包成功!') successLog();
} else { } else {
errorLog('项目打包失败, 请重试!') errorLog('项目打包失败, 请重试!')
process.exit() //退出流程 process.exit() //退出流程
@ -53,18 +57,20 @@ const compileDist = async () => {
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
const zipDist = async () => { const zipDist = async () => {
const loading = ora(defaultLog('正在压缩代码')).start(); const loading = ora(defaultLog('正在进行代码压缩')).start();
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4'] loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
try { try {
const distDir = path.resolve(__dirname, `${pathHierarchy}${config.OUTPUT_PATH}`); const distDir = path.resolve(__dirname, `${pathHierarchy}${config.OUTPUT_PATH}`);
await zipFile.tgz.compressDir(distDir, distZipPath) await zipFile.tgz.compressDir(distDir, distZipPath);
successLog('压缩成功!');
} catch (error) { } catch (error) {
loading.stop();
errorLog(error); errorLog(error);
errorLog('压缩失败, 退出程序!'); errorLog('压缩失败, 退出程序!');
process.exit(); //退出流程 process.exit(); //退出流程
} }
loading.stop(); loading.stop();
successLog();
} }
@ -89,13 +95,15 @@ const connectSSH = async () => {
try { try {
await SSH.connect(opt); await SSH.connect(opt);
successLog('SSH连接成功!');
} catch (error) { } catch (error) {
loading.stop();
errorLog(error); errorLog(error);
errorLog('SSH连接失败,请检查密码或者私钥以及网络状态!') errorLog('SSH连接失败,请检查密码或者私钥以及网络状态!')
process.exit(); //退出流程 process.exit(); //退出流程
} }
loading.stop(); loading.stop();
successLog();
} }
@ -104,28 +112,43 @@ const connectSSH = async () => {
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
const clearOldFile = async () => { const clearOldFile = async () => {
const loading = ora(defaultLog('正在进行部署准备')).start();
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
try { try {
await runCommand(`mkdir ${config.NAME}`); await runCommand(`mkdir ${config.NAME}`);
} catch (e) { } catch (e) {}
// console.log(`检索到服务器存在${config.NAME}文件夹`);
}
if (config.BACKUP) { if (config.BACKUP) {
const time = new Date().getTime();
try { try {
loading.text = '正在进行备份';
const time = new Date().getTime();
await runCommand(`tar -zcvf ${config.NAME}_${time}.tar.gz ${config.NAME}`); await runCommand(`tar -zcvf ${config.NAME}_${time}.tar.gz ${config.NAME}`);
} catch { console.log('-ok!')
console.log('备份失败'); } catch (error) {
errorLog(error);
errorLog('备份失败!')
} }
} }
try {
loading.text = '正在回收部署目录';
const commands = [`cd ${config.NAME} && ls`, `cd ${config.NAME} && rm -rf *`]; const commands = [`cd ${config.NAME} && ls`, `cd ${config.NAME} && rm -rf *`];
await Promise.all(commands.map(async (it) => { await Promise.all(commands.map(async (it) => {
return await runCommand(it); return await runCommand(it);
})); }));
console.log('-ok!')
} catch (e) {
loading.stop();
errorLog(error);
errorLog('回收部署目录失败!');
process.exit(); //退出流程
}
loading.stop();
successLog()
} }
/** /**
@ -134,16 +157,25 @@ const clearOldFile = async () => {
*/ */
const uploadFiles = async () => { const uploadFiles = async () => {
// 上传文件 // 上传文件
const loading = ora(defaultLog('准备上传文件')).start(); const loading = ora(defaultLog('正在进行部署')).start();
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4'] loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
try { try {
loading.text = '正在进行代码上传';
await SSH.putFiles([{ await SSH.putFiles([{
local: distZipPath, local: distZipPath,
remote: `${config.PATH}/${config.NAME}/smx-bundle.tar.gz` remote: `${config.PATH}/${config.NAME}/smx-bundle.tar.gz`
}]); //local 本地 ; remote 服务器 ; }]); //local 本地 ; remote 服务器 ;
successLog('上传成功!'); console.log('-ok!')
loading.text = '正在解压文件'; } catch (error) {
loading.stop();
errorLog(error);
errorLog('上传失败!');
process.exit(); //退出流程
}
try {
loading.text = '正在解压整理部署文件';
await runCommand(`cd ${config.NAME} && tar -zxvf smx-bundle.tar.gz`); //解压 await runCommand(`cd ${config.NAME} && tar -zxvf smx-bundle.tar.gz`); //解压
@ -153,6 +185,14 @@ const uploadFiles = async () => {
await runCommand(`mv -f ${config.PATH}/${config.NAME}/${config.OLD_NAME}/* ${config.PATH}/${config.NAME}`) await runCommand(`mv -f ${config.PATH}/${config.NAME}/${config.OLD_NAME}/* ${config.PATH}/${config.NAME}`)
await runCommand(`rm -rf ${config.PATH}/${config.NAME}/${config.OLD_NAME}`) //移出后删除 dist 文件夹 await runCommand(`rm -rf ${config.PATH}/${config.NAME}/${config.OLD_NAME}`) //移出后删除 dist 文件夹
console.log('-ok!')
} catch (e) {
loading.stop();
errorLog(error);
errorLog('解压整理出现异常!');
process.exit(); //退出流程
}
// 后续扩展命令 // 后续扩展命令
if (config.EXTENDS) { if (config.EXTENDS) {
@ -162,17 +202,15 @@ const uploadFiles = async () => {
} }
SSH.dispose(); //断开连接 SSH.dispose(); //断开连接
} catch (error) {
errorLog(error);
errorLog('上传失败!');
process.exit(); //退出流程
}
loading.stop(); loading.stop();
successLog()
} }
// 删除本地上传后的打包文件 // 删除本地上传后的打包文件
const deleteFile = async () => { const deleteFile = async () => {
const loading = ora(defaultLog('正在进行后续处理')).start();
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
delPath = distZipPath; delPath = distZipPath;
try { try {
/** /**
@ -183,9 +221,10 @@ const deleteFile = async () => {
} else { } else {
console.log('inexistence path', delPath); console.log('inexistence path', delPath);
} }
} catch (error) { } catch (error) {}
console.log('删除本地打包文件失败', error);
} loading.stop();
successLog()
} }
@ -217,10 +256,10 @@ const uploadZipBySSH = async () => {
//----------------------------------------发布程序---------------------------------------------------------// //----------------------------------------发布程序---------------------------------------------------------//
const runUploadTask = async () => { const runUploadTask = async () => {
console.log(chalk.yellow(`---------> 欢迎使用自动部署工具 <---------`)); console.log(chalk.yellow(`------------> 欢迎使用自动部署工具 <------------`));
//打包 //打包
if(config.BUILD_SHELL){ if (config.BUILD_SHELL) {
await compileDist() await compileDist()
} }
@ -232,11 +271,11 @@ const runUploadTask = async () => {
//删除本地打包文件 //删除本地打包文件
if(config.DELETE_LOCAL_PACKAGE){ if (config.DELETE_LOCAL_PACKAGE) {
await deleteFile(); await deleteFile();
} }
successLog('大吉大利, 部署成功!'); endLog('大吉大利, 部署成功');
process.exit(); process.exit();
} }