做互联网应用的各位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有什么更好的方法也一起分享啊,我在这算是抛砖引玉了。。。。。。
相关推荐
三、Apache Ant实例介绍 1. 创建build.xml:首先,我们需要创建一个名为build.xml的文件,包含如下内容: ```xml <project name="antDemo" default="compile" basedir="."> ${build.dir}/classes"/> ${...
总的来说,“ant入门小实例练习”是一个很好的起点,通过实践可以让你快速掌握Ant的基本操作,为后续更复杂的Java项目构建打下坚实的基础。在实践中,你还可以学习如何利用Ant管理依赖、执行单元测试、构建Web应用,...
在Java开发过程中,构建工具和...这个实例为你提供了一个实际操作的环境,你可以通过修改`build.xml`文件和测试类,进一步了解Ant和JUnit的用法,以及它们在实际项目中的应用。这将有助于提升你的Java开发和测试技能。
在本篇内容中,我们将深入探讨如何使用Ant进行项目打包的实例。 首先,让我们理解Ant的基本结构。一个典型的Ant构建文件`build.xml`分为几个主要部分:初始化、编译、测试、打包和部署等目标。这些目标由任务...
【Ant实例 web工程部署】与【Ant】标签相关的知识点: Ant是一个开源的Java构建工具,它简化了构建和部署Java应用程序的过程。在Ant出现之前,Java应用的构建通常依赖于平台特定的脚本、Makefile、多种IDE以及手动...
2. **任务(Tasks)**:Ant的任务是执行特定操作的单元,如`<javac>`用于编译Java源代码,`<jar>`用于创建Jar文件,`<war>`用于创建War文件。任务可以通过属性来定制其行为,如指定源代码目录、目标目录、类路径等。...
### ant实用实例 详细解析ant的用法 #### 一、Ant简介与基本概念 Apache Ant 是一个Java环境下的开源项目构建工具,主要用于自动化构建、部署等任务。它使用XML来描述构建过程,并且提供了丰富的任务(task)集合,...
本教程将引导你了解如何使用Ant完成"Hello World"实例。 首先,确保你已经安装了Ant。如果没有,可以从Apache官方网站下载并按照指南进行安装。安装完成后,可以在命令行中通过`ant -version`来检查Ant是否已正确...
本资源包含了"ant 开发及整合 源码 实例",是学习和理解Ant工作原理及实际应用的宝贵材料。 在"ant 开发及整合 源码 实例"中,你可以深入学习以下几个关键知识点: 1. **Ant基本概念**:了解Ant的核心组件,如项目...
在这个“ant简介及实例pdf”中,我们将会探讨Ant的基本概念、安装步骤以及一个实际应用的示例。 首先,让我们了解一下Ant的基本概念。Ant是一个基于任务驱动的构建工具,它的核心是构建文件(通常命名为build.xml)...
本实例展示了如何使用Ant进行文件复制操作。 ##### 1. XML文件结构 ```xml <!-- 定义属性 --> ${dest_drive} <!-- 创建目标目录 --> ${dest_dir}"/> <!-- 复制文件任务 --> ${dest_dir}"> **...
首先,我们来看标题“项目Ant配置实例一次下载各处使用”。这表明我们将学习如何创建一个可复用的Ant构建脚本,该脚本可以在不同的项目或环境中稍作调整后立即使用。Ant的配置主要体现在它的构建文件`build.xml`中,...
总结来说,“ant build 项目实例”涉及到的关键知识点包括Ant构建文件`build.xml`的结构和任务定义,`build_ODC.properties`中的项目配置管理,以及Ant如何处理构建过程中的各种操作,如编译、测试、打包和依赖管理...
例如,我们可以使用if或者unless属性来控制某些任务是否执行,或者使用foreach元素来遍历文件集执行相同的操作。 在项目中,Ant与JUnit集成进行单元测试也是一项重要工作。我们可以在build.xml中定义一个测试目标,...
标题中的“ant版本制作实例_uniportal和ant配置应用实例”指的是使用Apache Ant工具来构建和管理Java项目,特别是与uniportal相关的版本控制和配置。Apache Ant是一个基于XML的构建工具,广泛用于Java应用程序的自动...
本实例旨在为初学者提供一个Ant的基础入门指南,帮助理解并掌握其基本操作。 Ant的核心概念是构建文件(build.xml),它是Ant工作的蓝图,包含了构建项目的各种任务和目标。在我们的“myant01”实例中,我们可以...
6. **构建项目**:Ant还可以负责编译Java源代码,打包成JAR或WAR文件,甚至可以执行单元测试和部署操作。 7. **附录说明**:附录通常会包含更详细的配置示例、常见问题解答和最佳实践,帮助开发者更好地理解和应用...
在软件开发过程中,构建...这个实例是一个很好的起点,通过它你可以了解Ant的基本概念和操作,然后逐步扩展到更复杂的项目构建。记住,实践是最好的老师,动手尝试编写和运行`build.xml`,你会发现Ant的强大和便利。