`
franktony
  • 浏览: 13416 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

ant的远程发布

    博客分类:
  • java
阅读更多
以前公司做的是台湾的外包,每次发布都要remote到台湾的几台机器,经常有人抢机器用。每次要手动去check out,再执行ant,非常麻烦 。研究了一段时间的ant,有几种远程发布的方法。

一是用FTP,用ant的ftp命令把要发布的文件远程的复制过去,这样要在那边机器上装FTP服务器,还要分配账号,挺讨厌的。

二是用tomcat给的ant任务:deploy,可以把本地WAR文件传送到远程tomcat下,当然,tomcat要运行,也要设置好

tomcat的manager用户。我在本地局域网试一下,成功。

ant脚本简写如下,可能有些property没有复制过来

<property name="project.war.filename" value="${project.name}.war"/>
<property name="project.war.filepath" location="${dist.dir}/${project.war.filename}"/>

<property name="tomcat.server" value="192.168.0.117"/>
<property name="tomcat.username" value="admin"/>
<property name="tomcat.password" value="admin"/>
<property name="tomcat.port" value="8080"/>
<property name="tomcat.project.path" value="${project.name}"/>
<property name="tomcat.server.url" value="http://${tomcat.server}:${tomcat.port}"/>
<property name="tomcat.deploy.url" value="http://${tomcat.server}:${tomcat.port}/manager"/>

<target name="deploy-web" >
  <echo message="deploy start" />
  <deploy url="${tomcat.deploy.url}"
    username="${tomcat.username}"
    password="${tomcat.password}"
    path="${tomcat.project.path}"
    war="file:${project.war.filepath}"
    update="true" /> 
  <echo message="deploy end" />
</target>

本地速度很快,但是,传到台湾就比较烦了,WAR档几十MB速度太慢了,看着那边的机器tomcat老是一行行的打印出来正在接受远程发布,极其不爽.

最后研究了一下ant的telnet任务,这个初始的时候我根本就用不起来,可以telnet成功,但提示无法执行命令,google搜的头都大了,有老外说这个命令对windows支持不好,最好用linux,这个又不太现实.我反复尝试,最后发现是可以执行的,脚本如下:

   <property name="telnet.server" value="192.168.0.103"/> 
   <property name="telnet.userid" value="administrator"/>
   <property name="telnet.password" value=""/>
   <property name="telnet.prompt" value="[done]" />
   <property name="telnet.timeout" value="3" />
   <property name="telnet.port" value="23"/>  
   <property name="telnet.cd.directory" value="D:\xxxx\xxxx"/> 


   <target name="unix-prompts" if="target.isUnix">
     <property name="telnet.prompt.command"
       value="export PS1=${telnet.prompt}"/>
     <property name="telnet.initial.prompt" value="$"/>
   </target>
  
   <target name="windows-prompts" unless="target.isUnix">
     <property name="telnet.prompt.command"
       value="PROMPT ${telnet.prompt}"/>
     <property name="telnet.initial.prompt" value="&gt;"/>
   </target>


   <target name="deploy-remote"
       depends="unix-prompts,windows-prompts"
       unless="is.localhost">
     <telnet server="${telnet.server}" port="${telnet.port}"
         userid="${telnet.userid}" password="${telnet.password}"
         timeout="${telnet.timeout}" >
     
       <read string="${telnet.initial.prompt}"/>              
       <write>${telnet.prompt.command}</write>
    
       <read string="${telnet.prompt}"/>
       <write>cd ${telnet.cd.directory}</write>     
       <read string="${telnet.prompt}"/>
    
       <read string="${telnet.prompt}"/>
       <write>ant -buildfile=${telnet.cd.directory}\build.xml</write>
       <read string="${telnet.prompt}"/>
     </telnet>
   </target>

公司不用CVS,用的是starteam,于是再用starteam为提供的命令写个自动check out的脚本,如下:

<property name="starteam.servername" value="***.***.tw"/>
<property name="starteam.serverport" value="49222"/>
<property name="starteam.projectname" value="***_PROJECT"/>
<property name="starteam.viewname" value="***_PROJECT"/>
<property name="starteam.rootlocalfolder" value="D:\***_PROJECT"/>
<property name="starteam.rootstarteamfolder" value="***_PROJECT"/>
<property name="starteam.forced" value="false"/>
<property name="starteam.includes" value="*.*"/>
<property name="starteam.deleteuncontrolled" value="false"/>
<property name="starteam.recursive" value="true"/>
<property name="starteam.username" value="someuser"/>
<property name="starteam.password" value="*****"/>

   <target name="check-out">
        <stcheckout
         servername="${starteam.servername}"
         serverport="${starteam.serverport}"
         username="${starteam.username}"
         password="${starteam.password}"         
         projectname="${starteam.projectname}"
         viewname="${starteam.viewname}"
         recursive="${starteam.recursive}"        
         includes="${starteam.includes}"
         forced="${starteam.forced}"
         deleteuncontrolled="${starteam.deleteuncontrolled}"
         rootlocalfolder="${starteam.rootlocalfolder}"
        />
    </target>

注意starteam*.jar的版本要与自己机器上的starteam客户端版本一致,不然会出现unknown.

再加上个测试有没有发布成功的脚本

<target name="test-url">

  <waitfor maxwait="5" maxwaitunit="second" timeoutproperty="project.missing">
     <http url="${project.url}"/>
  </waitfor>
  <fail if="project.missing">No project found</fail>

</target>

再加上个如果成功发布则为项目成员发mail通知:

<target name="send-mail">
  <mail from="***@***.com.cn"
           bcclist="${addres.list}"
           mailhost="192.168.0.9"
           subject="deploy success"
           message="${success.message}"         
        >
  </mail>
</target>

判断tomcat是否在运行,如果没有则启动之,如下:


<target name="wait-for-server">
  <waitfor maxwait="5" maxwaitunit="second" timeoutproperty="server.missing">
   <http url="${tomcat.server.url}"/>
  </waitfor>
</target>

<target name="start-tomcat"  depends="wait-for-server" if="server.missing">
    <exec dir="${tomcat.home}/bin"  executable="${tomcat.home}/bin/startup.bat" />
  </target>

再设置好依赖关系与选择性执行任务,局域网内测试通过.

到时我们只要在本机执行deploy-remote,就可以让台湾那边机器自己去check out编译打包启动tomcat发布测试发布联接是否有效有效则发mail通知开发人员发布成功,再也不用remote到台湾机器上远程操作,打开starteam手工check out再打开控制台执行ant了,生活是多么美好啊!!

OK,万事具备,MSN上找到台湾人:可不可以在测试服务器上开通telnet?

回答的很干脆:不可以!

靠!!
4
2
分享到:
评论
2 楼 咖啡舞者 2008-06-23  
真幽默啊。。。
最后那个‘靠’字用的活灵活现,生动万分,入木三分那。
1 楼 xwkp2008 2008-03-14  
老大
你太牛了

相关推荐

    使用ANT远程发布Web项目

    ### 使用ANT远程发布Web项目 #### 一、概述 在软件开发过程中,自动化构建与部署是提高开发效率、减少人为错误的重要手段之一。Apache Ant 是一个用于自动化软件编译、测试、部署等过程的Java库及命令行工具,它...

    java ant发布项目到tomcat

    在本场景中,我们将探讨如何使用Ant来发布一个Web项目到Apache Tomcat服务器。 首先,理解Ant的基本结构是至关重要的。一个Ant项目通常包含一个build.xml文件,这是Ant执行的所有指令的中心。在这个文件中,我们...

    9_ant_通过ftp发布文件

    标题"9_ant_通过ftp发布文件"和描述暗示了我们将探讨如何使用Ant来通过FTP(File Transfer Protocol)协议上传文件。 FTP是一种用于在互联网上传输文件的标准协议。在Ant中,我们可以使用`ftp`任务来实现这一功能。...

    Ant权威指南(ant 学习)

    Ant支持自动部署应用程序到远程服务器,如`ftp`、`scp`任务可以用于文件传输,`deploy`任务可用于发布Web应用。 十二、测试集成 Ant与JUnit和其他测试框架良好集成,可以方便地执行单元测试,并生成测试报告。 ...

    ant-1.8.0 apache-ant-1.8.0

    9. **发布与部署**:Ant可以用于应用的打包、发布和部署,包括生成JAR、WAR或EAR文件,以及将这些文件部署到远程服务器上。 10. **依赖分析**:在Ant 1.8.0中,依赖分析能力得到提升,有助于优化构建顺序,减少不必...

    SpringMVC 多版本接口/IP访问控制/ANT打包发布到LINUX

    最后,关于**发布到LINUX**,在Linux环境中,我们需要确保Java环境已安装,并且正确配置了环境变量。部署步骤通常包括: 1. 使用SCP或SFTP将ANT打包生成的文件传输到Linux服务器的指定目录。 2. 使用SSH登录服务器...

    ant.rar java的架包ant

    5. 部署:Ant可以将构建结果发布到远程服务器,实现自动化部署。 三、Ant的优点 1. 平台无关性:基于Java的Ant可以在任何安装了Java的平台上运行。 2. 可扩展性:Ant提供了丰富的内置任务,同时允许用户自定义...

    apache-ant-1.6.2

    10. **部署与发布**:Ant可用于部署应用程序到远程服务器,包括上传文件、启动服务等操作。 在使用Apache Ant 1.6.2时,开发者需要注意的是,这个版本相比最新版本可能缺少一些特性,比如对新版本JDK的支持、新的...

    apache-ant-1.9.13

    例如,你可以使用`&lt;javac&gt;`任务来编译Java源代码,使用`&lt;jar&gt;`任务来打包结果,甚至使用`&lt;ftp&gt;`或`&lt;sshexec&gt;`任务来进行远程部署。 Ant 1.9.13 版本可能引入了一些新特性、修复了已知问题,增强了性能,以提供更好...

    .Ant安装编译操作手册

    - **编写目的**:本文档旨在指导软件发布人员如何正确安装与配置Apache Ant,解决在安装与使用过程中可能遇到的问题,确保能够顺利地使用Ant对Flex/Java工程项目进行自动化编译与打包。 #### 二、环境说明 - **Ant...

    ant使用指南.rar

    10. **部署与发布**:Ant可以用于部署应用到服务器,包括WAR和EAR文件的创建与发布,以及远程系统的文件传输。 通过“Ant使用指南”,你可以逐步学习如何设置和运行Ant项目,掌握如何编写和维护构建文件,以及如何...

    J2EE开发之ant开发工具

    5. **部署**:Ant可以通过`copy`或`ftp`任务将应用部署到远程服务器,简化了发布流程。 6. **依赖管理**:虽然Ant自身不提供复杂的依赖管理功能,但可以通过与 Ivy 或 Maven 结合,解决项目依赖库的下载和管理问题...

    ant-1.6.2直接解压使用

    - **部署**:支持发布应用程序到远程服务器,简化部署流程。 - **版本控制集成**:可以与SVN、Git等版本控制系统配合,管理源代码。 总之,Apache Ant 1.6.2提供了一种简洁、灵活的方式来管理和构建Java项目。...

    Apache-ANT完美详解

    - **部署**:发布应用程序到远程服务器或应用服务器。 - **清理**:清除构建过程中产生的临时文件和目录。 - **文件操作**:包括复制、移动、删除和重命名文件或目录。 3. **Ant的配置** - **环境设置**:确保...

    spring中用到的ant包

    - **构建部署**:使用`ftp`或`sftp`任务将构建结果发布到远程服务器。 在实际应用中,Spring项目可能会结合Ant与Ivy或Gradle等依赖管理工具,以更方便地管理和下载所需的库。 总的来说,虽然现代项目倾向于使用更...

    Ant1.8.2 编译打包工具

    Ant 1.8.2 是该工具的一个版本,发布于2010年,旨在提供更稳定、高效的项目构建功能。 在Ant 1.8.2中,你可以找到两个主要的压缩文件: 1. **apache-ant-1.8.2-src.zip**:这个文件包含了Ant 1.8.2的源代码,如果...

    ant-1.7下载附学习资料

    10. **部署与发布**:Ant可以用于部署应用到远程服务器,包括WAR和EAR文件的上传,以及数据库脚本的执行。 11. **版本控制集成**:尽管Ant 1.7年代较为久远,但依然可以集成CVS等早期的版本控制系统,进行版本控制...

    ant的build构建脚本

    ant脚本构建工具,有详细的注释、用于构建程序war包,执行编译、修改、拷贝、远程上传程序war包、远程发布程序、远程重启服务器(tomcat)

    apache-ant-1.7.1

    `apache-ant-1.7.1` 版本是Apache Ant的一个特定发行版,发布于2008年,为当时的开发者提供了稳定的构建环境。 在提供的文件列表中,我们可以看到以下关键文件: 1. **INSTALL**: 这通常是一个指南,包含了安装...

Global site tag (gtag.js) - Google Analytics