前端自动化部署

终于开始真正的接触到服务端的一些东西,用自己学到的去解决一些问题了~

由于前端大部分项目都是基于 node 技术栈的,所以本文介绍通过 PM2 作为 Node 项目的自动化部署与管理。

准备

首先 全局安装 npm install pm2 -g

因为 pm2 需求配置服务器免密登陆 ssh-copy-id username@ip-address

项目

做好了配置之后可以考虑下如何去解决剩下的问题了,首先 PM2 作为一款自动化发布的工具使用起来很方便,只需要安装后在项目中配置 ecosystem 的配置文件即可。

那么其实这个配置文件很多时候我们是不需要过多的关注的,即在很多的项目中只需要对一些关键配置信息进行配置即可。那么做成一个 npm 的工具岂不是更方便啦。

首先在入口文件处进行初始化询问用户对项目关键信息的配置,并保存成配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
cosnt scanner = readline.createInterface({
input: process.stdin,
output: process.stdout
});

function prompt(title, cb) {
function ask() {
scanner.question(title + ':\n', text => cb(text, ask))
}
ask();
}
let config = {};
prompt('Project的入口文件地址', (script, ask) => {
if (!script) { return ask() }
config.script = script;
// other code
...
fs.writeFile('./config.json', JSON.stringify(config), e => {
console.info('配置已保存');
})
})

获取到了用户设置的配置信息之后便可以在项目的根目录中生成一个 ecosystem 的配置文件了。

之后还需要生成一个 webhook.js 的文件用于接受 git 仓库发出的钩子用来及时的做自动化发布

1
2
3
4
5
6
7
8
...
app.get("/test.php", () => {
process.exec('pm2 deploy ecosystem.json servers', function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
})
})

使用

future: npm install gt-auto-release

future: node ./node_modules/gt-auto-release/index.js

根据提示在项目根目录中产生了 scosystem.json 之后

在项目根目录下执行 pm2 startOrRestart ecosystem.json --env production setup

发布

可以在git仓库下设置 webhook 触发的模式(commit / tag), 之后git仓库的提交便会自动化发布。

其实很简单就做成了一个自动化发布的工具,不过是把每个项目中都需要做的生成配置文件做成了工具生成,之后在单独启动一个 node 的进程去监听 webhook 即可。

期待能在工作中有更多的挑战,能越来越自然的去工程化的解决项目中重复劳动的问题~

也在日常的开发中不断的沉淀出自己的经验和成长。

hi you can see me