<?xml version="1.0" encoding="UTF-8"?>
<!-- 发布项目 -->
<project name="release" default="releaseService" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<!-- 必须放在最前面,可以确保能使用到编译平台的环境变量 -->
<property environment="env" />
<!-- 工作目录 -->
<property name="workspace" value="/home/callen/workspace/grepo" />
<!-- 要执行的项目名称 -->
<property name="projectName" value="要发布的项目名称" />
<!-- pom文件路径 -->
<!-- /home/callen/workspace/grepo/projectName-project/pom.xml-->
<property name="pom.file" value="${workspace}/${projectName}-project/pom.xml" />
<!-- maven的路径 -->
<property name="maven.home" value="/opt/maven" />
<!-- 服务器信息 -->
<property name="host" value="127.0.0.1" />
<property name="host.name" value="callen" />
<property name="host.pwd" value="callen" />
<property name="host.path" value="/opt/resources/wars" />
<!-- 以下为读取pom.xml 文件中的版本信息 -->
<!-- 使用maven命令获取maven的版本号 -->
<target name="version" description="获取maven的版本号">
<echo message="start maven build to war" />
<!-- 生成同目录下的 mvn.version 文件 -->
<exec executable="${maven.home}/bin/mvn" output="mvn.version">
<arg line="help:evaluate -Dexpression=project.version -q -DforceStdout -f ${pom.file}"/>
</exec>
</target>
<!-- 引入 antlib的功能标签,如 for/loadfile等 -->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<!-- 引入 groovy 脚本-->
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" >
<classpath>
<pathelement location="groovy-5.0.0-alpha-5.jar"/>
<pathelement location="groovy-ant-5.0.0-alpha-5.jar"/>
</classpath>
</taskdef>
<target name="readVersion" depends="version" description="读取maven的版本号">
<!-- 读取maven 的版本号 -->
<property file="mvn.version"/><!-- 读取同目录下的 mvn.version 文件 -->
<loadfile property="changed.files" srcFile="mvn.version"/>
<for list="${changed.files}" param="changedFile">
<sequential>
<property name="mvn.version" value="@{changedFile}" />
</sequential>
</for>
<echo message="maven version:${mvn.version}.war" />
<!-- 去掉换行符,使用groovy脚本 -->
<groovy>
def mavenVersion=properties["mvn.version"]
mavenVersion = mavenVersion.replace("\n", "")
properties["mvn.version"] = mavenVersion
</groovy>
<echo message='${mvn.version}.war'/>
</target>
<!-- 以上,得到项目的版本号 -->
<!-- 执行 maven 打包命令 -->
<target name="maven" depends="readVersion" description="使用maven进行打包生成war">
<echo message="start maven build to war" />
<exec executable="${maven.home}/bin/mvn">
<arg line="clean install -DskipTests -f ${pom.file} "/>
</exec>
</target>
<!-- 使用文件复制 -->
<target name="copyWar" depends="maven" description="把war包复制成有版本的">
<!-- 设置war包路径 -->
<property name="service.war" value="${workspace}/${projectName}-project/${projectName}/target/${projectName}.war" />
<property name="service.new.war" value="${workspace}/${projectName}-project/${projectName}/target/${projectName}-${mvn.version}.war" />
<echo message="service war path:${service.war}" />
<property name="api.war" value="${workspace}/${projectName}-project/${projectName}api/target/${projectName}api.war" />
<property name="api.new.war" value="${workspace}/${projectName}-project/${projectName}api/target/${projectName}api-${mvn.version}.war" />
<echo message="api war path:${api.war}" />
<copy file="${service.war}" tofile="${service.new.war}" />
<copy file="${api.war}" tofile="${api.new.war}" />
</target>
<!-- 如果使用scp ,则需要下载jsch-0.1.54.jar文件 -->
<target name="putWar" depends="copyWar" description="将war包放入服务器中">
<echo message="put local war to ssh server" />
<!-- 传输war包到服务器 -->
<echo message="put service war to ssh server" />
<scp todir="${host.name}:${host.pwd}@${host}:${host.path}" file="${service.new.war}" trust="yes" />
<sleep seconds="2"/>
<echo message="put api war to ssh server" />
<scp todir="${host.name}:${host.pwd}@${host}:${host.path}" file="${api.new.war}" trust="yes" />
<sleep seconds="2"/>
<echo message="end deploy..." />
</target>
<target name="releaseService" depends="putWar" description="重启服务">
<echo message="begin deploy..." />
<sshexec host="${host}" username="${host.name}" password="${host.pwd}" trust="yes"
command="/opt/wlp/bin/server stop ${projectName}Svr --force" failonerror="false" />
<sshexec host="${host}" username="${host.name}" password="${host.pwd}" trust="yes"
command="/opt/wlp/bin/server stop ${projectName}apiSvr --force" failonerror="false" />
<!-- 若进程还存在,则使用命令 kill 强制杀掉项目进程 -->
<sshexec host="${host}" username="${host.name}" password="${host.pwd}" trust="yes" failonerror="true"
command="ps -ef|grep -v 'grep'|grep ${projectName}|awk '$3~/[0-9]+/{print $2}'|while read s;do kill -9 $s; done;" />
<sleep seconds="2"/>
<!-- 删除缓存信息 -->
<sshexec host="${host}" username="${host.name}" password="${host.pwd}" trust="yes"
command="rm -rf /opt/wlp/usr/servers/${projectName}Svr/apps/expanded/*.war" />
<sshexec host="${host}" username="${host.name}" password="${host.pwd}" trust="yes"
command="rm -rf /opt/wlp/usr/servers/${projectName}apiSvr/apps/expanded/*.war" />
<!-- 启动服务 -->
<sshexec host="${host}" username="${host.name}" password="${host.pwd}" trust="yes"
command="/opt/wlp/bin/server start ${projectName}Svr --clean" />
<sleep seconds="2"/>
<sshexec host="${host}" username="${host.name}" password="${host.pwd}" trust="yes"
command="/opt/wlp/bin/server start ${projectName}apiSvr --clean" />
<echo message="end deploy..." />
</target>
</project>