通过Django自动发布tomcat项目

原创
2017/03/02 20:04
阅读数 3.4K

#框架介绍

整个发布系统用到的技术还是比较多的,涉及到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框架,关于它们的相关知识请参考:

这里重点讲两个点: 一个是通过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%的重复劳动了。

以上。

展开阅读全文
打赏
1
54 收藏
分享
加载中
DJZhu博主

引用来自“一两代码”的评论

试试jenkins吧
之前还真没了解过,发现挺强大。回头有需要再研究下。Thx~
2017/03/03 09:38
回复
举报
试试jenkins吧
2017/03/02 21:02
回复
举报
更多评论
打赏
2 评论
54 收藏
1
分享
返回顶部
顶部