环境说明:我用的是weblogic81sp5+apache ant 1.6.5+wincvs2.0.
全部代码:
dailybuild.xml:该xml适用范围
1)weblogic 环境.我的环境是cluster 下的管理服务器.管理服务器是挂在nodemanage下的.(后面会补充关于直接启动非nodemanager管理的管理服务器.)
<?xml version="1.0"?>
<project name="SP project ant Auto build script" basedir="." default="build">

<!-- Initializing -->
<property file="dailybuild.properties" />
<property name="cvsroot" value="${cvs.root}" />
<property name="cvspassword" value="${cvs.password}" />
<property name="fs.module.name" value="${cvs.fs.module}" />
<property name="fw.module.name" value="${cvs.fw.module}" />
<property name="sportal.module.name" value="${cvs.sportal.module}" />

<!-- properties for remote weblogic depoly-->
<property name="weblogic.servername" value="${weblogic.servername}" />
<property name="deploy.servername" value="${deploy.servername}" />
<property name="weblogic.adminurl" value="${weblogic.adminurl}" />
<property name="weblogic.home" value="${bea.home}/weblogic81" />
<property name="weblogic.lib" value="${weblogic.home}/server/lib" />
<property name="weblogic.version" value="${weblogic.version}" />
<property name="weblogic.username" value="${weblogic.username}" />
<property name="weblogic.password" value="${weblogic.password}" />
<property name="weblogic.domain" value="${weblogic.domain}" />
<property name="weblogic.domain.dir" value="${bea.home}/user_projects/domains/vigdomain" />
<property name="weblogic.config.dir" value="${weblogic.domain.dir}" />
<property name="weblogic.config.name" value="config.xml" />
<property name="portal.war.lib" value="${weblogic.home}/common/nodemanager/vigserver/stage/portal/portal.war/WEB-INF/lib" />

<property name="portlet.deployment.dir" value="${basedir}SPORTALuild" />
<taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy" >
<classpath location="${weblogic.lib}/weblogic.jar" />
</taskdef>
<taskdef name="wlserver" classname="weblogic.ant.taskdefs.management.WLServer" >
<classpath location="${weblogic.lib}/weblogic.jar" />
</taskdef>
<tstamp>
<format property="today" pattern="yyyy-MM-dd" />
</tstamp>
<echo message="${today}" />

<mkdir dir="logs" />
<!--info logs -->
<record name="${basedir}/logs/${today}_daily_build_info_log.txt" loglevel="info" />
<!--error logs -->
<record name="${basedir}/logs/${today}_daily_build_error_log.txt" loglevel="error" />

<!-- Retrieve the modules -->
<target name="check-out-fs">
<delete dir="${fs.module.name}"/>
<cvs cvsRoot="${cvsroot}" package="${fs.module.name}" command="checkout ${fs.module.name}" />
</target>
<target name="check-out-fw">
<delete dir="${fw.module.name}"/>
<cvs cvsRoot="${cvsroot}" package="${fw.module.name}" command="checkout ${fw.module.name}" />
</target>
<target name="check-out-sportal">
<delete dir="${sportal.module.name}"/>
<cvs cvsRoot="${cvsroot}" package="${sportal.module.name}/build.xml" command="checkout ${sportal.module.name}/build.xml" />
</target>

<!-- cvs checkout -->
<target name="check-out">
<antcall target="check-out-fs" />
<antcall target="check-out-fw" />
<antcall target="check-out-sportal" />
</target>

<!-- build XSP framework -->
<target name="build">
<antcall target="build-all" />
</target>

<target name="build-all" depends="check-out">
<antcall target="do.subant.buildall">
<param name="target.name" value="release" />
</antcall>
<antcall target="archive" />
<antcall target="reboot-server" />
<antcall target="deploywartoServer" />
<antcall target="reboot-server" />
</target>

<target name="do.subant.buildall">
<subant target="${target.name}">
<filelist dir="${basedir}SPORTAL">
<file name="" />
</filelist>
</subant>
</target>

<target name="deploywartoServer" description="Deploy to weblogic">
<echo message="Deployed ${portlet.warfile.name} to Weblogic AppServer" />
<wldeploy action="deploy" source="${infoboard.remote.server}/${portlet.warfile.name}" name="${portlet.app.name}" debug="true" targets="${deploy.servername}" adminurl="${weblogic.adminurl}" user="${weblogic.username}" password="${weblogic.password}" />
</target>

<target name="archive">
<echo message="${portlet.deployment.dir}/${portlet.warfile.name}" />
<echo message="delete start" />
<delete file="${infoboard.remote.server}/${portlet.warfile.name}" />
<delete file="${ui.remote.dir}/${uim.carfile.name}" />
<delete file="${ui.remote.dir}/${spui.carfile.name}" />
<!--<delete file="${portal.war.lib}/healthcheck_monitor.jar" />
<delete file="${portal.war.lib}/HPPWebServicesFramework.jar" />
<delete file="${portal.war.lib}/ServicePortalSSO.jar" />
<delete file="${portal.war.lib}/SPCommonUtils.jar" />
<delete file="${portal.war.lib}/SPHPPTaglibs.jar" />-->
<echo message="delete finish" />
<copy file="${portlet.deployment.dir}/${uim.carfile.name}" todir="${ui.remote.dir}" />
<copy file="${portlet.deployment.dir}/${spui.carfile.name}" todir="${ui.remote.dir}" />
<copy file="${portlet.deployment.dir}/${portlet.warfile.name}" todir="${infoboard.remote.server}" />
<!--<copy file="${portlet.deployment.dir}/healthcheck_monitor.jar" todir="${portal.war.lib}" />
<copy file="${portlet.deployment.dir}/HPPWebServicesFramework.jar" todir="${portal.war.lib}" />
<copy file="${portlet.deployment.dir}/ServicePortalSSO.jar" todir="${portal.war.lib}" />
<copy file="${portlet.deployment.dir}/SPCommonUtils.jar" todir="${portal.war.lib}" />
<copy file="${portlet.deployment.dir}/SPHPPTaglibs.jar" todir="${portal.war.lib}" />-->
</target>

<path id="weblogic.classpath">
<pathelement path="${java.classpath}">
</pathelement>
<fileset dir="${weblogic.lib}">
<include name="weblogic.jar">
</include>
<include name="ojdbc14.jar">
</include>
<include name="wlclient.jar">
</include>
<include name="webservices.jar">
</include>
</fileset>
<fileset dir="${vignette.server.path}/lib/shared">
<include name="portlet.jar" />
<include name="vgn-jsr-container-shared.jar" />
<include name="vgn-jsr-container-taglib.jar" />
<include name="vgn-portal-config.jar" />
<include name="vgn-portal-log-spi.jar" />
<include name="vgn-portal-naming-portlet.jar" />
<include name="vgn-portal-shared.jar" />
<include name="vgn-portlet-app-registry.jar" />
</fileset>
<fileset dir="${vignette.server.path}/lib/ext">
<include name="jms.jar" />
<include name="servlet.jar" />
<include name="vgn-portal-discussionmigration.jar" />
</fileset>
<fileset dir="${vignette.server.path}/lib">
<include name="oracle.jar">
</include>
<include name="mail.jar">
</include>
</fileset>
<fileset dir="${weblogic.home}/common/eval/pointbase/lib">
<include name="pbclient44.jar" />
<include name="pbserver44.jar" />
<include name="pbtools44.jar" />
</fileset>
</path>
<!--
<target name="stop-server">
<echo message="******************************************************" />
<echo message="Stop the weblogic managed server" />
<wlserver host="localhost" port="7003" username="${weblogic.username}" password="${weblogic.password}" action="shutdown" forceshutdown="true" />
<echo message="******************************************************" />
<echo message="OK.Stop the weblogic managed server successfully" />
</target>
-->
<target name="reboot-server" description="Starts a managed server">
<!--Need to invoke lookupNodeManagerRuntime before we can look up the runtime mbean -->
<java classname="weblogic.Admin" failonerror="false" fork="true" classpathref="weblogic.classpath">
<arg line="-url ${weblogic.adminurl}" />
<arg line="-username ${weblogic.username}" />
<arg line="-password ${weblogic.password}" />
<arg line=" INVOKE" />
<arg line="-mbean ${weblogic.domain}:Name=${weblogic.machine},Type=Machine" />
<arg line="-method lookupNodeManagerRuntime" />
</java>
<java classname="weblogic.Admin" failonerror="false" fork="true" classpathref="weblogic.classpath">
<arg line="-url ${weblogic.adminurl}" />
<arg line="-username ${weblogic.username}" />
<arg line="-password ${weblogic.password}" />
<arg line="-mbean ${weblogic.domain}:Location=${weblogic.adminservername},Name=${weblogic.machine},ServerRuntime=${weblogic.adminservername},Type=NodeManagerRuntime" />
<arg line="stopcluster -clustername vigcluster" />
</java>
<!-- Lookup the NodeManagerRuntimeMBean and give the command to start it. -->
<java classname="weblogic.Admin" failonerror="false" fork="true" classpathref="weblogic.classpath">
<arg line="-url ${weblogic.adminurl}" />
<arg line="-username ${weblogic.username}" />
<arg line="-password ${weblogic.password}" />
<arg line="-mbean ${weblogic.domain}:Location=${weblogic.adminservername},Name=${weblogic.machine},ServerRuntime=${weblogic.adminservername},Type=NodeManagerRuntime" />
<arg line="startcluster -clustername vigcluster" />
</java>
</target>

<!--
<target name="start-server" depends="stop-server">
<java classname="weblogic.Server" fork="yes" classpathref="weblogic.classpath" failonerror="true">
<sysproperty key="weblogic.Domain" value="${weblogic.domain}">
</sysproperty>
<sysproperty key="weblogic.NodeManager" value="${weblogic.home}/commom/nodemanager">
</sysproperty>
<sysproperty key="weblogic.RootDirectory" value="${weblogic.config.dir}">
</sysproperty>
<sysproperty key="weblogic.ConfigFile" value="${weblogic.config.name}">
</sysproperty>
<sysproperty key="weblogic.ListenPort" value="7003">
</sysproperty>
<sysproperty key="weblogic.ListenAddress" value="">
</sysproperty>
<sysproperty key="weblogic.management.server" value="${weblogic.adminurl}">
</sysproperty>
<sysproperty key="java.security.policy" value="${weblogic.home}/server/lib/weblogic.policy">
</sysproperty>
<sysproperty key="weblogic.Name" value="${weblogic.servername}">
</sysproperty>
<arg line="-ms32m -mx200m">
</arg>
<arg line="-Xnohup">
</arg>
<jvmarg value="-Dcom.vignette.portal.installdir.path=C:VignettePortal" />
</java>
<wlserver beahome="${bea.home}" weblogichome="${weblogic.home}" dir="${weblogic.domain.dir}" adminserverurl="${weblogic.adminurl}" servername="vigcluster" username="${weblogic.username}" password="${weblogic.password}" action="reboot" />
</target>
-->
<!--
<target name="deploytoTomcat" depends="archive" description="Deploy to tomcat">
<echo message="Deployed expanded web archive to Tomcat" />
<copy todir="D:vignetteTomcat 5.5webapps">
<fileset dir="..">
<include name="*.war" />
</fileset>
</copy>
</target>
-->

<!-- A summary target useful for testing recent changes without updating
source control. Deploys the expanded version of the web archive.-->
<!--
<target name="expanded" depends="compile, test, archive, deploytoTomcat" />
-->

<!-- increment is a placeholder for a source-control specific way of incrementing
the build version of a file, such as manifest.mf or component.xml. -->
<target name="increment" description="increments the build artifact">
<echo message="Supply your increment logic here." />
</target>

<!-- label_and_get is a placeholder for a source-control specific way of labeling
the tip and then getting that label, so that the script will build an
identifiable version of the portlet. -->
<target name="label_and_get" description="labels source control tip and gets from that label">
<echo message="Supply your label_and_get logic here." />
</target>


<!-- test is a placeholder for a the junit task. -->
<target name="test" description="runs unit tests">
<echo message="Supply your junit task here." />
</target>

<!-- configure makes sure web.xml is properly configured for use on VAP. -->
<target name="configure" description="configures web.xml for use on VAP">
<PortletPackageTool dir="../web-root/" contextroot="${portlet.context.root}" rename="false" failonerror="true" />
</target>


<!-- checkin is a placeholder for a source-control specific target that adds the
new portlet version to source control. -->
<target name="checkin" description="checks the final .war into source control">
<echo message="Supply your source control check-in logic here." />
</target>

</project>

dailybuild.properties:
cvs.root=:pserver:yourcvsaccount:yourcvsaccount@bamboo.chn.hp.com:/external/Repo3
cvs.local.root=C:/CVS_HOME
cvs.fs.module=SP_FS
cvs.fw.module=SP_FW
cvs.sportal.module=SPORTAL
bea.home=C:/bea
weblogic.version=8.1
weblogic.username=vigadmin
weblogic.password=vignette
weblogic.domain=vigdomain
weblogic.adminservername=adminserver
weblogic.machine=pigalle
weblogic.adminurl=t3://localhost:7001
deploy.servername=vigcluster
java.classpath=C:/bea/jdk142_11/lib
vignette.server.path=C:/Vignette/Portal
infoboard.remote.server=C:/SPUpload
portlet.warfile.name=Infoboard.war
portlet.app.name=Service_Portal_Infoboard_Application
ui.remote.dir=C:/Vignette/Portal/deployment/upload
uim.carfile.name=uim.car
spui.carfile.name=ServicePortalUI.car
代码分析:
<target name="check-out-fs">
<delete dir="${fs.module.name}"/>
<cvs cvsRoot="${cvsroot}" package="${fs.module.name}" command="checkout ${fs.module.name}" />
</target>
Check out cvs,你必须首先安装cvs client,包括wincvs和cvsnt.安装完cvs候需要重启计算机,然后进入cmd.键入cvs,如果安装成功会提示cvs的版本等一些信息.
cvsRoot 是用于鉴别用户访问权限和路径的.一般写在properties里面,package是你要check out 的Module. command支持cvs命令.such as update delete等..
<taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy" >
<classpath location="${weblogic.lib}/weblogic.jar" />
</taskdef>
定义了weblogic deployer类的位置,我们在deploy to weblogic的时候使用的就是Deployer的类.这里将其引入,下面的代码就能够使用wldeploy这个标签了.
<target name="deploywartoServer" description="Deploy to weblogic">
<echo message="Deployed ${portlet.warfile.name} to Weblogic AppServer" />
<wldeploy action="deploy" source="${infoboard.remote.server}/${portlet.warfile.name}" name="${portlet.app.name}" debug="true" targets="${deploy.servername}" adminurl="${weblogic.adminurl}" user="${weblogic.username}" password="${weblogic.password}" />
</target>
antion通常有:deploy redeploy start stop等.
source:你需要部署的war包的位置
name:war包的名称
targets:部署应用的目标服务器(cluster or nodemanager)
adminurl:default is t3://localhost:7001
username:your weblogic admin user name
password:your weblogic admin password.
<target name="reboot-server" description="Starts a managed server">
<!--Need to invoke lookupNodeManagerRuntime before we can look up the runtime mbean -->
<java classname="weblogic.Admin" failonerror="false" fork="true" classpathref="weblogic.classpath">
<arg line="-url ${weblogic.adminurl}" />
<arg line="-username ${weblogic.username}" />
<arg line="-password ${weblogic.password}" />
<arg line=" INVOKE" />
<arg line="-mbean ${weblogic.domain}:Name=${weblogic.machine},Type=Machine" />
<arg line="-method lookupNodeManagerRuntime" />
</java>
<java classname="weblogic.Admin" failonerror="false" fork="true" classpathref="weblogic.classpath">
<arg line="-url ${weblogic.adminurl}" />
<arg line="-username ${weblogic.username}" />
<arg line="-password ${weblogic.password}" />
<arg line="-mbean ${weblogic.domain}:Location=${weblogic.adminservername},Name=${weblogic.machine},ServerRuntime=${weblogic.adminservername},Type=NodeManagerRuntime" />
<arg line="stopcluster -clustername vigcluster" />
</java>
<!-- Lookup the NodeManagerRuntimeMBean and give the command to start it. -->
<java classname="weblogic.Admin" failonerror="false" fork="true" classpathref="weblogic.classpath">
<arg line="-url ${weblogic.adminurl}" />
<arg line="-username ${weblogic.username}" />
<arg line="-password ${weblogic.password}" />
<arg line="-mbean ${weblogic.domain}:Location=${weblogic.adminservername},Name=${weblogic.machine},ServerRuntime=${weblogic.adminservername},Type=NodeManagerRuntime" />
<arg line="startcluster -clustername vigcluster" />
</java>
</target>
重启服务器:这里重启的是cluster下面的基于nodemanager管理的服务器.
重启这个服务器需要在weblogic里面配置Machine.
Log in to the weblogic console.点击左边Machines 然后create 自己的machine,nodemanager的选项默认,然后把你要托管的管理服务器选上,重启weblogic.(不要选择adminserver).
关于重启非nodemanager的服务器(代码如下)
<target name="start-server" depends="stop-server">
<java classname="weblogic.Server" fork="yes" classpathref="weblogic.classpath" failonerror="true">
<sysproperty key="weblogic.Domain" value="${weblogic.domain}">
</sysproperty>
<sysproperty key="weblogic.NodeManager" value="${weblogic.home}/commom/nodemanager">
</sysproperty>
<sysproperty key="weblogic.RootDirectory" value="${weblogic.config.dir}">
</sysproperty>
<sysproperty key="weblogic.ConfigFile" value="${weblogic.config.name}">
</sysproperty>
<sysproperty key="weblogic.ListenPort" value="7003">
</sysproperty>
<sysproperty key="weblogic.ListenAddress" value="">
</sysproperty>
<sysproperty key="weblogic.management.server" value="${weblogic.adminurl}">
</sysproperty>
<sysproperty key="java.security.policy" value="${weblogic.home}/server/lib/weblogic.policy">
</sysproperty>
<sysproperty key="weblogic.Name" value="${weblogic.servername}">
</sysproperty>
<arg line="-ms32m -mx200m">
</arg>
<arg line="-Xnohup">
</arg>
<jvmarg value="-Dcom.vignette.portal.installdir.path=C:VignettePortal" />
</java>
</target>