做互联网应用的各位tx都已经被部署过程的繁琐烦透了吧?
先要压缩,然后一台机器一台机器的上传,接着还要停止服务器,解压缩,重新启动。。。。。。
如果只有两天台机器,那么还可以忍受;但是如果你有七八台机器要部署时,你的感觉一定是要疯掉了。更何况如工程比较大的话,压缩、上传都要花费很多的时间,我们宝贵的时间就这样溜走了。更可恶的是我们很多时候需要加班也是因为部署的效率太慢。
废话太多了,还是直接进入主题吧,让你和我们一起分享部署的乐趣吧!
首先说明几个主要的ant命令:
- scp:一个optional task,用来上传文件到远程服务器上;
- sshexec:ssh大家很熟悉吧?这个任务就是用来执行一个ssh脚本命令,可以执行远程服务器的命令;
- fileset:这个大家应该也比较熟悉,用来设置一个文件的集合,关键的是它的一个子元素date可以用来设定文件的日期范围,比如<date datetime="2007.12.18 00:00:00" pattern="yyyy.MM.dd HH:mm:ss" when="after" />指定2007年12月18日以后的文件,具体的说明请参见http://ant.apache.org/manual/index.html;
主要就是这几个命令,很简单吧。
接着我们分析一下我们部署的一般流程吧。
- 我们要先把本地的文件压缩到一个压缩文件中,实现增量部署的关键也是在这里(感谢付成睿的帮助)。最好的方式是每次只压缩最近修改的内容,而那些没有修改的内容没有必要再次上传。压缩一个时间点以后的文件可以通过date来实现,不过我们需要自动的记录上一次部署的时间。现在有两种方式可以做这件事,一种是付成睿的,比较简单,但会修改配置文件;另外一种就是我的方式,也就是将日期保存到一个文件中,如果没有文件就认为是全部部署,并创建文件。
具体的代码如下:
<target name="appZipModified">
<!-- 判断文件是否存在 -->
<condition property="local.app.timestamp.present">
<available file="${app.zip.timestamp.file}" type="file" />
</condition>
<!-- 如果文件不存在则创建文件 -->
<antcall target="mkStampFile">
<param name="zipFilePresent" value="${local.app.timestamp.present}" />
<param name="newZipFile" value="${app.zip.timestamp.file}" />
</antcall>
<!-- 从文件中获取上次部署的时间 -->
<echo>Load the old timestamp from the disk file</echo>
<loadfile property="old.zip.timestamp" srcFile="${app.zip.timestamp.file}" />
<!-- 获取当前时间 -->
<tstamp>
<format property="this.zip.timestamp" pattern="${ts.pattern}" />
</tstamp>
<echo>zip the new modified files & folders that after ${old.zip.timestamp} to ${appzip} </echo>
<!-- 先删除上次的zip文件,这样保证上次的压缩的文件不会再次上传 -->
<delete file="${appzip}" />
<!-- 执行压缩操作 -->
<zip destfile="${appzip}">
<fileset dir="../WebRoot">
<include name="**/*" />
<!-- 这个语句是关键,只压缩old.zip.timestamp以后修改的文件 -->
<date datetime="${old.zip.timestamp}" pattern="${ts.pattern}" when="after" />
</fileset>
</zip>
<echo>Replace the old timestamp with the new timestamp</echo>
<!-- 最后将当前的时间更新到文件中 -->
<replace file="${app.zip.timestamp.file}" token="${old.zip.timestamp}" value="${this.zip.timestamp}" />
</target>
<!-- 创建文件的操作,unless的含义是zipFilePresent为false时才执行,与之对应的是if -->
<target name="mkStampFile" unless="zipFilePresent">
<echo>Create txt file to store timestamp</echo>
<!-- 创建一个文件 -->
<touch file="${newZipFile}" datetime="12/19/2007 21:20 pm" />
<!-- 应用正则表达式的replace命令,写入一个很早的时间(正则真是太神奇了!) -->
<replaceregexp file="${newZipFile}" match=".*" replace="2000.01.01 00:00:00" byline="true" />
</target>
这种方式还是比较复杂的,使用付成睿的方法则更简单。只是需要在properties文件中增加last.zip.timestamp的设置。
<target name="zipModified">
<echo>zip modified files</echo>
<echo>get current time stamp</echo>
<tstamp>
<format property="this.zip.timestamp" pattern="${ts.pattern}" />
</tstamp>
<echo>current time stamp: ${this.zip.timestamp}</echo>
<echo>zip modified files aflter ${last.zip.timestamp}</echo>
<zip destfile="${local.testZip}">
<fileset dir="./test">
<date datetime="${last.zip.timestamp}" pattern="${ts.pattern}" when="after" />
</fileset>
</zip>
<echo>save this zip time stamp</echo>
<replace file="build.properties" token="${last.zip.timestamp}" value="${this.zip.timestamp}" />
</target>
- 有了zip文件后下面就需要把文件上传到服务器上,方法如下:
<!-- 上传zip压缩文件 -->
<target name="uploadZipApp" description="upload ziped app file to remote server">
<echo>upload ziped app file to remote server</echo>
<scp file="${appzip}" todir="user@${host}:/path/test.zip" password="${pass}" trust="yes" />
</target>
很简单吧? - 上传完后就是在服务器的操作了(例子用的是unix),包括解压缩、停止服务器、重新启动等,主要还是如何远程调用服务器命令。
下面的例子是将文件解压缩,最关键的是sshexec命令的用法。
<!-- 解压缩备份文件 -->
<target name="unZipBackupResource" description="decompress the backup tar file back to the file system">
<echo>decompress the backup tar file back to the file system</echo>
<sshexec host="${host}" username="user" command="tar xvf test.tar" password="${pass}" trust="yes" />
</target>
做其他的操作只要把上面例子中的黑体字部分去掉就可以了。 - 最后最好将一个完整的部署流程封装到一个target中,这样部署一台服务器只要输入相应的密码就可以了。
- 而现在部署时你要做的操作只是在outline模式下在一个部署的target上点击右键,然后run就可以了。
这就是完整的流程。
如果部署的是jsp文件或者静态文件,那就更简单了,直接上传解压缩就可以了。
其他tz有什么更好的方法也一起分享啊,我在这算是抛砖引玉了。。。。。。
相关推荐
主要介绍ant入门的基本操作,希望对大家有所帮助,水平有限,请指正.
在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。 一.安装与配置 二.Ant的关键元素 三.Ant的常用任务 四.利用Ant构建和部署Java工程 1.利用Ant的javac任务来编译java程序 2.使用...
第4 章 在 Eclipse 中进行资源构建 ——Ant 使用实例... 60 4.1 Ant 简介... 60 4.1.1 构造文件的主要标记... 60 4.1.2 Ant 的常用任务(Task)... 62 4.2 Eclipse 与Ant 的集成... 64 4.2.1 创建Ant...
在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。 一. 安装与配置 下载地址:http://ant.apache.org/,在本文中下载的是1.7.0版本。解压到某个目录(例如E:"apache-ant-1.7.0),...
详细的介绍了ANT配制文件build.xml的目录结构,以及各个标签的用法和作用,并结合实例讲述了利用Ant构建和部署Java工程的步骤和方法。Ant可以代替使用javac、java和jar等命令来执行java操作,从而达到轻松的构建和...
在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...
在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...
在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...
在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...
将蚁群优化算法与粒子群优化算法进行组合,并利用遗传算法的交叉操作与变异操作对粒子多样性进行改进,提高全局优化效率,并配有实例演示。
最近做的一个项目是基于 vue + AntDesign 的。由于项目要求,需要在 Table 组件的行内点右键的时候弹出菜单。在线演示地址及最终效果图如下: 在线演示地址>> 首先新建一个Table组件的实例: <a> { return ...
一 Ant简介 Apache Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的自动化构建。它是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的...二 Ant环境搭建及入门实例
StandAdmin Demo For Ant Design Pro StandAdmin is CRUD framework work perfectly with Antd Pro. 标准 CRUD 选取控件 多实例 批量操作 异形列表 异形查询 记录复制 多编辑 关联展开 新建初始值 数据转换-新建/...
<com.ant.liao.GifView android:id="@+id/gif2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingTop="4px" android:paddingLeft="14px" android:enabled="false" /> ...
ant-design-vue版本:~1.3.8 需求:表格实现跨行合并,并且在合并完的单元格中显示图片 效果图: 源码: export default { data() { return { pic95: require('@/assets/produit/95.png'), pic99: require('@/...
第一部份:介绍实例架构 结合实例讲解Web项目总体结构 分析多层结构优点 具体讲解每个层次的实现技巧 第二部分:介绍组织层次关联利器(Spring) 快速入门 Factory模式 IOC模式 ...借助Ant的自动部署
主要介绍了confirm的用法,confirm一般用于按钮操作时确定是否执行,需要的朋友可以参考下
4.5 JDBC操作数据库的基本流程和简单实例 4.6 使用JDBC连接各种数据库的方法 4.7 小结 第5章 软件开发模型及方法 5.1 两层模型和三层模型 5.2 Web应用的开发方法 5.3 小结 第3部分 使用JSP开发系统 …… 第4部分 ...
网上发行的一个资料很适合初学者,安卓经典Android开发入门教程,有实例,有android开发视频教程,还附带源码,欢迎各位下载一起学习! 教程(一) 平台简介 令人激动的Google手机操作系统平台-Android正式发布了,...
/extras目录——提供了对Ant的支持文件,可也用于持续集成 /lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录 /licenses目录——软件许可文件,不用管 /printable_docs目录——Jmeter用户手册 6.Jmeter...