基于shipit-deploy实现的多服务器自动化部署

为什么要自动化部署,我这里就不多赘述了。

基于shipit-deploy的自动化部署,可以实现以下效果

一键部署多台服务器。
一键回滚多台服务器。
本地操作,不需要登录服务器。
方便定制,方便扩展,实现自动化。

使用

1.下载安装

1
2
npm install --save-dev shipit-cli
npm install --save-dev shipit-deploy

2.与服务器建立信任关系

1
ssh-copy-id USER@REMOTE_HOST

3.配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
module.exports = function (shipit) {
require('shipit-deploy')(shipit);
require('shipit-pm2')(shipit);
require('shipit-cnpmjs')(shipit);

shipit.initConfig({
default: {
workspace: '/tmp/github-monitor',
deployTo: '/tmp/deploy_to', //服务器的目标路径
repositoryUrl: 'https://github.com/user/repo.git', //git仓库地址
ignores: ['.git', 'node_modules'], //排除的文件
keepReleases: 2, //发布保留的版本数量
deleteOnRollback: false,
key: '/path/to/key',
shallowClone: true,
cnpm: {
remote: false
}
},
dev: { //开发服务器部署
servers: ['user@devServer1', 'user@devServer1'],
branch: 'dev' //需要发布的git分支,
pm2: {
json: 'pm2-dev-app.json' //开发环境的pm2启动配置
}
},
prod: { //生产服务器部署
servers: ['user@prodServer1', 'user@prodServer2'],
branch: 'master' //需要发布的git分支,
pm2: {
json: 'pm2-prod-app.json' //生产jam环境的pm2启动配置
}
}
});
};
pm2-prod-app.json 示例:

{
"apps": [
{
"name": "frontend_name",
"script": "app.js",
"args": "--env=production",
"instances": 1,
"cwd": "/tmp/production_path/current",
"env": {
"NODE_ENV": "production",
"PORT": "9001"
}
}
]
}

当然,我们也可以使用以下脚本来启动项目

1
pm2 startOrRestart pm2-prod-app.json

发布

1
2
3
4
5
shipit dev deploy //开发环境发布
shipit dev rollback //回滚

shipit prod deploy //生产环境发布
shipit prod rollback //回滚