简介
Coding是我们平时开发中常用的版本控制工具,不同于Github,Coding中提供私有的仓库,而且Coding还提供5个免费的项目空间,对于一般的用户来说应该够用了(不够可以删除没有的项目嘛),因此,我们可以将不想公开的项目放入到Coding的私有仓库中。当然,这片文章的重点不是教你如何使用Coding,如果你还不会使用Coding或者Git,建议可以先去学习一下Git的使用。
相信很多写Java Web或者从事后台开发的童鞋,在项目很多的情况下,经常会苦恼于频繁的部署项目。像一些大公司如阿里、腾讯、京东、亚马逊等,他们每天都可能要进行上百次的部署。那他们是如何实现的呢?像这些大公司内部都会有很一套完善的部署工具,从开发到集成部署,全部都是自动化流水线,不需要人工干预,因此才能完成成百上千次的发布部署。笔者最近开始写Java后台,使用tomcat进行发布程序,相信很多童鞋和我最开始一样,是手动将war文件上传到webapp目录下进行发布,每次都需要重启tomcat,而tomcat在服务器上有重启的特别慢,我的服务器上一般在1-2分钟左右,当项目多了,有时候就更长了。如果每次都重启项目,那其它项目也会被重新加载,会影响其它项目的正常使用。就在这种情况,我就想能不能不每次重启tomcat就能实现发布部署呢?这样可以帮我节省不少时间,在公司里,可以帮运维节省不少时间。下面就是我要介绍的如何实现tomcat自动部署:
用到的工具
- Express
- Coding
- Forever
Express 是一种保持最低程度规模的灵活 Node.js Web 应用程序框架。
Coding 国内的版本控制工具
Forever nodejs项目后台运行工具
基本原理
Express是运行在服务器上的server,Coding使用存放我们的项目,当我们使用push提交项目到Coding时,会触发Coding中的WebHook,WebHook会发送一条消息到server上,当Express收到Coding中WebHook的消息时便会执行git pull命令,更新项目,同时部署到tomcat 中。原理图如下:
实现步骤
Coding端
1 配置Coding 中的WebHook
URL:这里为http://ip/webhook
token: 可以不写,也可以写,是一种验证方式,如果写了,那么Express项目中要进行匹配
服务器端Server:
1 安装nodejs
apt-get install nodejs
2 在指定目录中安装express(我是在创建的webhook文件中)
npm install express
3 安装express-generator apt install node-express-generator
4 创建express项目,我这里叫codingWebHook
创建好项目后提示要配置环境
配置项目环境 npm install
5 安装node apt install nodejs-legacy
6 写Express服务,这也是最重要的一步,在进入项目的routes目录,创建webhook.js文件
webhook.js 中代码如下:
var express = require('express');
var router = express.Router();
const exec = require('child_process').exec;
router.post('/webhook', (req, res) => {
if ('project' === req.body['token']) {
exec('git pull', {'cwd': '服务器下的项目所在位置,如/root/project'},
(error, stdout, stderr) => {
if (error !== null) {
res.send('<pre> pull fail!\n' + stdout + error + '</pre>');
} else {
res.send('<pre>pull done!\n' + stdout + '</pre>');
}
});
}
else {
console.log(' failed token ');
res.send('<pre>token不正确?</pre>');
}
});
module.exports = router;
7 配置app.js中的路由,这一步也非常关键,就是URL中的/webhook这个路径
修改 app.js中的代码:
8 Express 启动 npm start
9 安装forever sudo npm install -g forever
10 通过forever启动express forever start ./bin/www
以为到这路就全部结束了?
上面的步骤只是将项目从coding中pull下来,而要完成热部署,还需要配置tomcat,如果项目是在tomcat的webapps路径下或ROOT目录下,那么就不要配置tomcat
了,但是如果项目不在tomcat中,就需要配置虚拟路径,充实开启热部署功能,如下:
Context docBase="/root/project/path" reloadable="true" autoDeploy="true" debug="1"/>
到这里才是真正的完成了,后面可以安心撸代码了~