<?xml version="1.0"?>
<!-- 从svn更新源代码,并重新编译、打包、部署 -->
<project name="auto-deploy" basedir="." default="redeploy">
<!-- 属性定义(在不同的环境,应该要重新定义合适自己的属性值) -->
<!-- 定义存放检出代码的目录 -->
<property name="checkout_dir" value="project1"/>
<!-- 指明要检出的代码在svn服务器上的url -->
<property name="project_svn_url" value="https://xxx.com/svn/01 Code/project1/"/>
<!-- 指明svn账号 -->
<property name="svn_repository_user" value="user1"/>
<!-- 指明svn密码 -->
<property name="svn_repository_passwd" value="123456789"/>
<!-- 指明tomcat的目录 -->
<property name="tomcat_home" value="F:/company1/apache-tomcat-7.0.47"/>
<!-- 指定打包后war文件的名称 -->
<property name="war_name" value="project1"/>
<!-- 指明svnant任务插件用到的jar文件的路径 -->
<property name="svnant_lib" value="lib"/>
<!-- 指明编译时需要用到的其他jar文件的路径 -->
<property name="other_lib" value="3rd_lib"/>
<!-- 当前时间及格式 -->
<tstamp>
<format property="current_time" pattern="yyyyMMddhhmm" locale="zh"/>
</tstamp>
<!-- path to the svnant libraries. Usually they will be located in ANT_HOME/lib -->
<path id="svnant_classpath">
<fileset dir="${svnant_lib}">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- 项目的classpath路径 -->
<path id="project_classpath">
<fileset dir="${checkout_dir}/WebRoot/WEB-INF/lib/">
<include name="*.jar"/>
</fileset>
<!-- 编译时额外需要javax.servlet.jar和javax.servlet.jsp.jar -->
<fileset dir="${other_lib}">
<include name="*.jar"/>
</fileset>
</path>
<!-- 引入svn任务 -->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant_classpath" />
<!-- 设置svn属性 -->
<svnSetting id="svnparams" username="${svn_repository_user}" password="${svn_repository_passwd}" javahl="false"/>
<!-- 删除源代码文件夹 -->
<target name="clean-src">
<echo message="开始删除检出的源码(源码目录:${checkout_dir}),请稍后..." />
<delete dir="${checkout_dir}"/>
<echo message="源码删除完毕。" />
</target>
<!-- 从SVN服务器checkout源代码 -->
<target name="checkout" depends="clean-src">
<echo message="开始从svn服务器${project_svn_url}检出代码,请稍后..." />
<svn refid="svnparams">
<checkout url="${project_svn_url}" revision="HEAD" destPath="${checkout_dir}" force="true"/>
</svn>
<echo message="从svn服务器${project_svn_url}检出代码完成。" />
</target>
<!-- 从SVN服务器update源代码 -->
<target name="update">
<echo message="开始从svn服务器${project_svn_url}更新代码,请稍后..." />
<update revision="HEAD" dir="${checkout_dir}" />
<echo message="从svn服务器${project_svn_url}更新代码完成。" />
</target>
<!-- 清除旧的编译文件 -->
<target name="clean-class">
<echo message="开始清空classes文件夹内之前编译生成的旧的类文件,请稍后..." />
<delete dir="${checkout_dir}/WebRoot/WEB-INF/classes"/>
<mkdir dir="${checkout_dir}/WebRoot/WEB-INF/classes"/>
<echo message="classes文件清空完毕。" />
</target>
<!-- 编译源代码 -->
<target name="compile" depends="checkout,clean-class">
<echo message="开始编译源文件,请稍后..." />
<javac nowarn="true" destdir="${checkout_dir}/WebRoot/WEB-INF/classes" source="1.5" target="1.5" debug="false"
deprecation="false" optimize="false" failonerror="true">
<src path="${checkout_dir}/src"/>
<classpath refid="project_classpath"/>
</javac>
</target>
<!-- 复制配置文件 -->
<target name="copy-config-files" depends="compile">
<copy todir="${checkout_dir}/WebRoot/WEB-INF/classes/conf/">
<fileset dir="${checkout_dir}/src/conf/"/>
</copy>
<copy todir="${checkout_dir}/WebRoot/WEB-INF/classes/">
<fileset file="${checkout_dir}/src/log4j.properties"/>
</copy>
</target>
<!-- 生成war包 -->
<target name="generate-war" depends="copy-config-files">
<war warfile="./${war_name}.war" webxml="${checkout_dir}/WebRoot/WEB-INF/web.xml" excludes="*.svn">
<lib dir="${checkout_dir}/WebRoot/WEB-INF/lib"/>
<classes dir = "${checkout_dir}/WebRoot/WEB-INF/classes"/>
<fileset dir="${checkout_dir}/WebRoot"/>
</war>
</target>
<!-- 启动tomcat -->
<target name="start-tomcat">
<echo>开始启动tomcat,请稍后....</echo>
<exec executable="${tomcat_home}/bin/startup.bat" failonerror="false"
vmlauncher="false" output="${tomcat_home}/logs/log.txt" append="true">
<!-- <arg value="/c" /> -->
<env key="CATALINA_HOME" path="${tomcat_home}"/>
<arg value="/c startup.bat" />
</exec>
<!-- 检测tomcat的URL是否可以访问成功,访问成功则认为tomcat启动完成 -->
<waitfor maxwait="10" maxwaitunit="minute" checkevery="1000">
<http url="http://localhost:8080/"/>
</waitfor>
<echo>启动tomcat完成。</echo>
</target>
<!-- 停止tomcat,生成war文件成功才停止tomcat来部署 -->
<target name="stop-tomcat" depends="generate-war">
<echo>开始停止tomcat,请稍后...</echo>
<exec executable="${tomcat_home}/bin/shutdown.bat" failonerror="false"
output="${tomcat_home}/logs/log.txt" append="true" >
<!-- <arg value="/c" /> -->
<env key="CATALINA_HOME" path="${tomcat_home}"/>
<arg value="/c shutdown.bat" />
</exec>
<!-- 检测tomcat的URL是否访问失败(用not标签),访问失败则认为tomcat已经停止。 -->
<waitfor maxwait="10" maxwaitunit="minute" checkevery="1000">
<not>
<http url="http://localhost:8080/"/>
</not>
</waitfor>
<echo>停止tomcat完成。</echo>
</target>
<!-- 检查是否存在已经部署的旧的目标war包。 -->
<target name="old-war-exist-check">
<echo>检查是否存在旧的同名war文件...</echo>
<available file="${tomcat_home}/webapps/${war_name}.war" property="old-war-isexist"/>
</target>
<!-- 重新部署前,备份原来的war文件。 -->
<target name="backup-old-war" depends="old-war-exist-check" if="old-war-isexist">
<echo>存在旧的同名war文件,开始备份之前部署的旧的同名war文件...</echo>
<copy tofile="./${war_name}_bak${current_time}.war">
<fileset file="${tomcat_home}/webapps/${war_name}.war"/>
</copy>
<echo>备份旧的同名war文件完毕。</echo>
</target>
<!-- 删除原来的war文件 -->
<target name="delete-old-war" depends="backup-old-war" if="old-war-isexist">
<echo>开始删除旧的同名war文件...</echo>
<delete file="${tomcat_home}/webapps/${war_name}.war"/>
<echo>删除旧的同名war文件完毕。</echo>
</target>
<!-- 检查是否存在已经部署的目标context文件夹。 -->
<target name="old-context-exist-check">
<echo>检查是否存在旧的同名context文件夹...</echo>
<available file="${tomcat_home}/webapps/${war_name}" type="dir" property="old-context-isexist"/>
</target>
<!-- 删除旧的目标context文件夹 -->
<target name="delete-old-context" depends="old-context-exist-check" if="old-context-isexist">
<echo>存在旧的同名context文件夹,开始删除旧的同名context文件夹...</echo>
<delete dir="${tomcat_home}/webapps/${war_name}"/>
<echo>删除旧的同名context文件夹完毕。</echo>
</target>
<!-- 把新打包的war文件复制到tomcat的webapps目录下 -->
<target name="copy-new-war-into-webapps" depends="delete-old-context,delete-old-war">
<echo>开始复制新的war文件到tomcat的webapps目录下,请稍后...</echo>
<copy tofile="${tomcat_home}/webapps/${war_name}.war">
<fileset file="./${war_name}.war"/>
</copy>
<echo>复制新的war文件到tomcat的webapps目录下完毕。</echo>
</target>
<!-- 部署,主要是执行依赖任务 -->
<target name="redeploy" depends="stop-tomcat,copy-new-war-into-webapps,start-tomcat">
<echo>部署完毕,请测试是否部署成功。</echo>
</target>
</project>
分享到:
相关推荐
本文主要介绍如何使用Jenkins自动化地将代码从Subversion(SVN)仓库部署到Apache Tomcat服务器上。这是一个持续集成的过程,能够帮助开发者实现代码的自动下载、编译、打包以及部署,提高工作效率。 1. **Jenkins...
在开发完成后,你可以通过Liferay的部署目录或者使用Ant脚本将插件部署到Tomcat服务器上。对于团队协作,使用版本控制系统如SVN来管理源代码至关重要,以便跟踪更改和协同工作。 总之,Liferay插件开发是一个涉及多...
4. **应用服务器(App server)**:如Apache Tomcat和JBoss,它们用于部署和运行Web应用程序。 **持续集成架构** 在典型的持续集成环境中,开发人员使用版本控制系统提交代码,而CI服务器如CruiseControl会监听...
6. **项目构建与部署**:源码中可能包含构建脚本(如Ant或Maven),可以学习如何构建和部署Web应用。 7. **版本控制**:可能包含版本控制系统的文件(如.git或.svn),介绍如何使用Git或SVN进行版本管理。 8. **Web...
7. **构建工具**:MyEclipse集成了Ant和Maven等多种构建工具,可以自动化编译、打包、部署应用,大大提高了开发效率。 8. **Web开发支持**:MyEclipse对Web开发提供了全面的支持,包括HTML、CSS、JavaScript编辑,...
- **核心优势**:IntelliJ IDEA在智能代码辅助、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS集成以及GUI设计等方面拥有卓越的表现,特别是其强大的调试功能。 #### 二、IDEA的安装与配置 - **安装过程**:下载...
### Hudson配置详解 #### 一、前言 随着软件开发项目的日益复杂,持续集成(Continuous Integration,CI)已经成为提升开发效率、确保代码质量的重要手段之一。Hudson作为一款开源的持续集成工具,能够帮助团队...
3. 测试完成后,系统自动部署到生产环境。 #### 三、持续集成(CI) 持续集成是一种软件开发实践,它强调频繁地将代码变更合并到主分支,并通过自动化构建和测试来验证变更的正确性。持续集成的核心要素包括: 1....
Selenium WebDriver 是一个用于自动化Web应用测试的工具,它直接与浏览器交互,并且能够模拟真实用户的操作。WebDriver2 版本相比于早期版本有着更好的稳定性和兼容性,支持多种编程语言如 Java、Python 等。本文将...
### Jenkins 搭建 Android 自动打包环境详解 #### Jenkins 安装与配置 ##### Jenkins 安装方式 1. **War 文件部署**: 下载 Jenkins 的最新 war 文件 (`jenkins.war`),将其部署到 Servlet 容器如 Tomcat 中,并...