ant的远程发布

以前公司做的是台湾的外包,每次发布都要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=">"/>
</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?

回答的很干脆:不可以!

靠!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值