首页 > 编程语言 >作为前端leader,如何搭建属于我们公司自己的流水线自动化部署系统(node+express)

作为前端leader,如何搭建属于我们公司自己的流水线自动化部署系统(node+express)

时间:2024-02-07 10:56:27浏览次数:22  
标签:node git console require express fs error leader 打包

背景:自动化部署系统主要可以集成到公司内部的管理系统中去,比如公司有多个项目,移动端H5,大屏网站,门户网站等...每次发布或者迭代都需要前端同事打包然后在交给运维或者后端同事放到服务器上进行部署

,如果有一个项目多个同事合作完成 还要走git合并流程,所以我们的目标就是不让前端进行打包,开发完成代码后 直接提交就行,通过点击管理后台的某个按钮触发某个平台的前端项目自动更新,同时也不需要

在交付给运维或者后端,便携式与流程管理,实现自动化部署(这里只说自己实现的,当然你们也可以去接入腾讯或阿里的自动化流水部署系统,但是某些环境下只能使用自己的如何去实现)

 这里做一个简单的版本和实现代码,可以自己扩展回滚本版,本版记录等,发布人员落实在责任人等...

1.创建一个干净的express项目,写一个空接口吧下面代码放进去,调用就执行

const shell = require('shelljs');
var fs = require('fs');
var path = require('path');
const { exec } = require('node:child_process');

// 1.切换到项目地址
const project_path = '/www/wwwroot/menghangl/public/test';
shell.cd(project_path);

// 2.删除打包的旧前端dist文件
function deleteDir(url) {
  if (fs.existsSync(url)) {
    fs.readdirSync(url).forEach(function(file, index) {
      var curPath = path.join(url, file);
      if (fs.statSync(curPath).isDirectory()) {
        // 如果是文件夹,则递归调用deleteDir函数
        deleteDir(curPath);
      } else {
        // 如果是文件,则删除文件
        fs.unlinkSync(curPath);
      }
    });
    // 删除文件夹
    fs.rmdirSync(url);
  } else {
    console.log("给定的路径不存在!");
  }
};
deleteDir('/www/wwwroot/menghangl/public/test/dist');

// 3.执行打包命令
const command = 'npm run build';
// 打包展示的进度
let schedule = 0; 
// 打包成功回调
let build = exec(command, (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error打包失败: ${error}`);
    return;
  }
  schedule = 0;
  console.log('打包成功,打包结束在这里结束接口请求,或者断开长连接')
});

// 4打包进度实时显示 并输出打包步骤
build.stdout.on('data', function(data) {
 if(schedule!==100){
     console.log(`Program output 【${schedule}%】`,data)
     schedule += 20;
 } else {
     console.log(data)
 }
});

 

2.服务端通过git获取最新仓库内容

const shell = require('shelljs');
var fs = require('fs');
var path = require('path');
const { exec } = require('node:child_process');
//判定git命令是否可用
if (!shell.which('git')) {
    //向命令行打印git命令不可用的提示信息
    shell.echo('Sorry, this script requires git');
    //退出当前进程
    shell.exit(1);
} else {
    console.log('可以使用')
// 切换到要拉取的文件夹目录 shell.cd('/www/wwwroot/menghangl/public/test_git');
// 远程仓库的git命令与地址 const command = 'git clone https://gitee.com/martins_coachman/blog-vue3-b.git'; let build = exec(command, (error, stdout, stderr) => { if (error) { console.error(`拉取失败: ${error}`); return; } console.log('拉取成功') }); }

 

3.优化与部署流程建议

上面两部分就是核心代码

1.首先先要自己部署一个node服务到服务器

2.写一个接口吧第一步骤放进去 在打包成功的地方结束请求,也可以用长连接,通过开启和关闭开实现

并且实时显示打包进度和状态

3.如果要使用git,自动同步代码,就先拉取等待拉取完成回调后,在执行打包逻辑代码

4.注意打包的时候会占用较多的cpu与内存,所以建议一个一个任务去执行,避开流量高峰期

5.解决这个的方法还有一个,就是在本地打包成功后直接git提交代码包括打包后的文件,服务器直接拉取最新代码即可

6.另外由于打包是在服务端进行,所以有时候我们开发功能添加了新的npm库 需要更新 node_modules包,建议先执行cnpm i 在去执行npm run build

7.最后可能node_modules会变的比较大 非常占用服务器硬盘空间 所以建议每次打包完成后删除 node_modules 包

 

这样就可以 用列表选择的方式在后台管理系统进行配置 动态传入不同的项目地址,远程仓库地址,执行命令等,通过后台管理系统像表单一样填写然后执行打包完成!

 

标签:node,git,console,require,express,fs,error,leader,打包
From: https://www.cnblogs.com/Allen-project/p/18010035

相关文章

  • nodejs学习计划--(三)http协议和IP介绍
    一、HTPP协议1、概念HTTP(hypertexttransportprotocol)协议;中文叫超文本传输协议是一种基于TCP/IP的应用层通信协议这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。协议中主要规定了两个方面的内容客户端:用来向服务器发送数据,可以被称之为请求报文服务端......
  • 源码安装node
    进入官网https://nodejs.org/en/about/previous-releases文件拖放lrzszhttps://registry.npmmirror.com/binary.html?path=node/v12.14.1/解压sudodpkg-icode_1.49.3-1601661857_amd64.deb解压deb后缀解压7z后缀安装sudoaptinstallp7zip-full7zx文件......
  • nodejs中实现sm4加解密
    SM4是中国密码局颁布的一种分组密码算法,也称为国密SM4。它是基于对称密钥加密算法的一种分组密码算法,具有较高的安全性和较快的加密速度。SM4使用128位的密钥和128位的分组进行加密。sm-crypto是一个支持国密SM2、SM3、SM4等算法的Node.js加密库。要使用sm-crypto库......
  • DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(二)
    为用户创建易访问的WindowsForms应用程序不仅是最佳实践的体现,还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。一个可访问的WinForms应用程序提供了各种好处,包括:扩大......
  • prometheus之node_exporter安装
    一、简介node_exporter用来安装到被监控的主机上,暴露被监控主机的指标数据,服务器端基于http协议调用的端口9100(默认)来获取被监控服务器信息。二、安装部署下载地址https://github.com/prometheus/node_exporter/releases1、解压安装#tar-xvfnode_exporter-*.linux-amd6......
  • jenkins 报错The engine "node" is incompatible with this module. Expected version
     错误是由于node版本不兼容导致的,解决方案就是忽略引擎版本的检查解决方案在前端编译的时候忽略引擎版本检测sh"yarnconfigsetregistryhttps://registry.npmmirror.com/"sh"npm-v"sh"yarn-v"sh"yarnadd......
  • DevExpress ASP.NET Web Forms v23.2最新版本系统环境配置要求
    本文档包含有关安装和使用 DevExpressASP.NETWebForms控件的系统要求的信息。点击获取DevExpressv23.2正式版.NETFrameworkDevExpressASP.NETWebForms控件和MVC扩展支持以下.NETFramework版本。IDEDevExpressASP.NET控件支持以下VisualStudio版本。Visual......
  • Windows中通过NVM安装和切换各个NodeJS版本
    1、下载NVM下载地址:https://github.com/coreybutler/nvm-windows/releases如我们下载:https://github.com/coreybutler/nvm-windows/releases/download/1.1.12/nvm-setup.exe2、安装NVM在安装前,最好将已安装的NodeJS卸载掉,避免出现不必要的问题。选择NVM安装目录,如下所示:......
  • 界面控件DevExpress ASP.NET Spreadsheet组件 - 轻松集成电子表格功能!(一)
    DevExpressASP.NETSpreadsheet组件允许您轻松地将电子表格功能合并到任意ASP.NET应用程序,它可以加载、转换和保存工作簿到XLS-XLSx二进制文件格式,还可以导出和导入XLSX、CSV和TXT文件。P.S:DevExpressASP.NETWebForms Controls拥有针对Web表单(包括报表)的110+种UI控件,可利......
  • 【数据库】SQL 错误 [42P10] ERROR SELECT DISTINCT ON expressions must match ini
    SQL错误[42P10],表示在使用SELECTDISTINCTON语句时,表达式必须与初始的ORDERBY表达式匹配。这个错误通常发生在你尝试对不同的列进行去重操作时,而这些列并没有在ORDERBY子句中明确指定。为什么会出现这个错误?当你使用SELECTDISTINCTON语句时,你需要提供一个或多个......