通过Django自动发布tomcat项目
2017-03-02 21:02
204 查看
摘要: 通过tomcat发布项目在shell里反反复复循环类似的命令是一件痛苦的事情,而且一旦敲错,甚至有可能出现无法挽回的损失。本文介绍一套完整的自动化解决方案,帮助你只关注编码,让枯燥的工作交给机器去做吧!
#框架介绍
整个发布系统用到的技术还是比较多的,涉及到Git/SVN做源码管理,Maven做项目管理,Tomcat作为Java-Web容器,Django监听并执行发布指令,Linux-Shell则自动化关联起各个模块。但虽然多,但是用到的技术都比较简单,相信一番折腾之后,对工作效率的提高肯定是很明显的!
![](https://static.oschina.net/uploads/img/201703/02192706_y6pT.png)
#操作流程
##第0步,Git/SVN源码托管,Maven构建项目
这一步讲起来就比较远离文章核心了,关于这部分的内容有很多其他文章有所论述。这里就不再重复了。总而言之你只要能够了解下面两句简单命令,并能成功地把你的项目编译成war包。这一步就完成了。
##第1步,编写Shell脚本实现半自动化代码拉取和项目构建
下面以一个测试项目为例子,写一个脚本:
之所以称之为半自动化,是因为脚本本身还需要我们来点击,虽然已经很方便了,但是我们希望可以让哪怕不懂linux的前端同事在提交完代码之后也可以自己发布。那么我们还需要提供一个http的监听服务,让所有的开发都可以通过一个http请求就完成一整套的发布动作。
##第2步,搭建Django项目,监听http请求,执行上面发布脚本
Django是一个强大的python框架,关于它们的相关知识请参考:
Python教程 - 廖雪峰的官方网站
Django基础教程 - 自强学堂
这里重点讲两个点:
一个是通过url参数来设置简单的访问密码
主要就这些,完成了Django的搭建之后,启动Django
##第3步,访问domain.url:8787/reinstall/password执行项目发布。
#写在最后
最后要提醒的就是,很显然这里的安全措施做的很差,直接使用这套方案的时候需要妥善保存你的发布地址。然后当然基本上每个步骤都还有很大的优化空间,只是对于普通的项目来说,这样一个简单的处理已经可以减少80%的重复劳动了。
以上。
#框架介绍
整个发布系统用到的技术还是比较多的,涉及到Git/SVN做源码管理,Maven做项目管理,Tomcat作为Java-Web容器,Django监听并执行发布指令,Linux-Shell则自动化关联起各个模块。但虽然多,但是用到的技术都比较简单,相信一番折腾之后,对工作效率的提高肯定是很明显的!
![](https://static.oschina.net/uploads/img/201703/02192706_y6pT.png)
#操作流程
##第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%的重复劳动了。
以上。
相关文章推荐
- tomcat自动发布项目
- Eclipse中将web项目自动发布到Tomcat webapps下
- tomcat通过conf-Catalina-localhost目录发布项目详解
- tomcat通过conf-Catalina-localhost目录发布项目详解
- eclipse中如何将web项目自动发布到Tomcat webapps下
- ANT发布SVN WEB项目到TOMCAT以及利用post-commit自动提交编译更新
- tomcat通过conf-Catalina-localhost目录发布项目详解
- maven web配置发布路径 cargo自动部署项目到tomcat
- CentOS系统下Apache Ant自动从SVN获取代码并通过Tomcat集群发布工程
- tomcat通过conf-Catalina-localhost目录发布项目详解
- tomcat通过conf-Catalina-localhost目录发布项目详解
- maven web项目在eclipse上自动发布到tomcat出错解决办法
- iOS项目通过xcodebuild和xcrun自动发布
- flex可以通过中间件tomcat发布成web项目,应该如何创建项目?
- Eclipse中将web项目自动发布到Tomcat webapps下
- tomcat项目自动发布脚本.项目配置脚本
- tomcat通过conf-Catalina-localhost目录发布项目详解
- tomcat通过conf-Catalina-localhost目录发布项目详解
- tomcat通过conf-Catalina-localhost目录发布项目详情
- ANT发布SVN WEB项目到TOMCAT以及利用post-commit自动提交编译更新