前端工程化的今天,版本发布已经成为开发中的重要一环。 很多项目开发中都开始使用jenkins来做自动发版工作。 不过jenkins复杂的安装配置比较不容易上手,而且很多环境是不适用安装jenkins来做自动发版的。 我模拟Jenkins逻辑写了一个node版本的自动发版的程序。带大家了解一下自动发版的基本原理。同时,如果需要的朋友也可以直接上手来使用。 仓库地址和使用方式使用方式: > git clone https://github.com/shb190802/node-jenkins.git> cd node-jenkins> npm install> node app.js 浏览器访问YOUR_IP_ADDRESS:3011 需求分析首先分析,如果要做到自动发版需要实现哪些功能。
技术实现1、从相应仓库下载要发布的分支此处使用download-git-repo,来完成从相应仓库下载要发布的分支代码。放置在一个临时目录下。
2、编译代码编译代码我们使用child_process.exec来执行命令行命令来执行 // 示例方法const COMMAND = ['npm config set registry http://registry.npm./', 'npm install', 'npm run build']for (let i = 0, len = COMMAND.length; i < len; i++) { await this.exec(COMMAND[i]) // 需要在async函数中} 3、将编译后代码发送到服务器对应目录这里使用到ssh2-sftp-client
4、项目优化前三步已经完成一个自动下载、打包、发布的流程。 (1)将编译选项抽象成配置项将配置选项从代码中抽象出来,我们将发版程序做的更加独立。 { /** build config */ name: '聊天室 客户端', repo: 'https://github.com/shb190802/chat.git', // 仓库地址 branch: 'master', // 编译分支 默认master srcPath: 'client', // 项目编译目录,一般是vue.config.js所在目录 buildCommand: ['npm config set registry http://registry.npm./', 'npm install', 'npm run build'], outputPath: 'server/static/html', // 编译目录 默认是srcPath下 dist /* host config */ remotePath: '/usr/local/nginx/html/html', //YOUR_REMOTE web项目远程目录 注意,由于会提前清空远程目录。请慎重填写地址 host: '', // YOUR_HOST web服务器IP地址 username: '', // YOUR_NAME password: '' // YOUR_PWD} (2)重复使用node_modulesnode的依赖安装,占到了打包的很大一部分时间。 5、使用koa创建一个server端,给局域网内其他同事提供打包服务即时完成了前边步骤,我们也还只是一个单机版的发版程序。 |
|