您的位置:首页 > 运维架构 > Tomcat

通过Django自动发布tomcat项目

2017-03-02 21:02 204 查看
摘要: 通过tomcat发布项目在shell里反反复复循环类似的命令是一件痛苦的事情,而且一旦敲错,甚至有可能出现无法挽回的损失。本文介绍一套完整的自动化解决方案,帮助你只关注编码,让枯燥的工作交给机器去做吧!

#框架介绍

整个发布系统用到的技术还是比较多的,涉及到Git/SVN做源码管理,Maven做项目管理,Tomcat作为Java-Web容器,Django监听并执行发布指令,Linux-Shell则自动化关联起各个模块。但虽然多,但是用到的技术都比较简单,相信一番折腾之后,对工作效率的提高肯定是很明显的!



#操作流程

##第0步,Git/SVN源码托管,Maven构建项目
这一步讲起来就比较远离文章核心了,关于这部分的内容有很多其他文章有所论述。这里就不再重复了。总而言之你只要能够了解下面两句简单命令,并能成功地把你的项目编译成war包。这一步就完成了。

git pull
或者
svn update
。拉取源码。

mvn package
。编译项目,得到war包。

##第1步,编写Shell脚本实现半自动化代码拉取和项目构建
下面以一个测试项目为例子,写一个脚本:

#!/bin/bash
#reinstall.sh

#定义项目名称,这里定义为和源码管理中项目根目录同名
#比如这里,我们在git或svn上有一个项目叫`myProj`
projName="myProj"

#我们把项目放在/home/chak/src//$projName目录下
#开始前先把原有的target目录清空下
rm -Rf /home/chak/src/$projName/target

#同样,清空一下webapps目录
rm -Rf /home/chak/bin/apache-tomcat-7.0.70/webapps/ROOT.war

#到源码目录,执行命令拉取新代码,如果用的是svn则是`svn update`
cd /home/chak/src/$projName
git pull

#maven打包,得到war包
mvn package

#移动覆盖.war包到tomcat目录
cp /home/chak/src/$projName/target/ROOT.war /home/chak/bin/apache-tomcat-7.0.70/webapps/ROOT.war

#如果在tomcat中配置了reloadable=true,当tomcat检测到webapps目录下的项目文件发生变化时,会自动重新发布项目,
#如果没有配置动态发布,则还需要添加命令重启一下tomcat

#写入发布日志
echo "更新代码:"$_date | tee -a /home/chak/src/$projName.log

echo "等待war解压,项目启动中..."

之所以称之为半自动化,是因为脚本本身还需要我们来点击,虽然已经很方便了,但是我们希望可以让哪怕不懂linux的前端同事在提交完代码之后也可以自己发布。那么我们还需要提供一个http的监听服务,让所有的开发都可以通过一个http请求就完成一整套的发布动作。

##第2步,搭建Django项目,监听http请求,执行上面发布脚本
Django是一个强大的python框架,关于它们的相关知识请参考:

Python教程 - 廖雪峰的官方网站

Django基础教程 - 自强学堂

这里重点讲两个点:
一个是通过url参数来设置简单的访问密码

views.py
from django.conf.urls import url
from django.contrib import admin
from reinstall import views as reinstall
from index import views as index

urlpatterns = [
url(r'^reinstall/(\d+)$', reinstall.index), #安装路径为/reinstall/password。 我们会在reinstall中获取这个password,判断是否正确,然后才做发布动作
]

# coding:utf-8
from django.http import HttpResponse
import os

def index(request, pwd):
if pwd == "password": #做简单的验证,当然你也可以按照自己的需要提高发布项目的安全等级,把校验做复杂做安全
tmp = os.popen('sudo /home/chak/shell/reinstall.sh').readlines() #通过python调用shell脚本,并得到输出结果
return HttpResponse(u"安装成功,等一会就重启好了!" + str(tmp)) #这里直接把结果返回给前端展示,如果不想暴露细节,还可以进一步在这里做一层修饰封装

主要就这些,完成了Django的搭建之后,启动Django

nohup sudo python manage.py runserver 0.0.0.0:8787 & #这里通过nohup ... & 来实现将django当作deamon进程运行

##第3步,访问domain.url:8787/reinstall/password执行项目发布。

#写在最后
最后要提醒的就是,很显然这里的安全措施做的很差,直接使用这套方案的时候需要妥善保存你的发布地址。然后当然基本上每个步骤都还有很大的优化空间,只是对于普通的项目来说,这样一个简单的处理已经可以减少80%的重复劳动了。

以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息