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

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

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

<propertyname="portlet.deployment.dir"value="${basedir}SPORTALuild"/>

<taskdefname="wldeploy"classname="weblogic.ant.taskdefs.management.WLDeploy">
<classpathlocation="${weblogic.lib}/weblogic.jar"/>
</taskdef>
<taskdefname="wlserver"classname="weblogic.ant.taskdefs.management.WLServer">
<classpathlocation="${weblogic.lib}/weblogic.jar"/>
</taskdef>

<tstamp>
<formatproperty="today"pattern="yyyy-MM-dd"/>
</tstamp>
<echomessage="${today}"/>

<mkdirdir="logs"/>
<!--infologs-->
<recordname="${basedir}/logs/${today}_daily_build_info_log.txt"loglevel="info"/>
<!--errorlogs-->
<recordname="${basedir}/logs/${today}_daily_build_error_log.txt"loglevel="error"/>

<!--Retrievethemodules-->
<targetname="check-out-fs">
<deletedir="${fs.module.name}"/>
<cvscvsRoot="${cvsroot}"package="${fs.module.name}"command="checkout${fs.module.name}"/>
</target>
<targetname="check-out-fw">
<deletedir="${fw.module.name}"/>
<cvscvsRoot="${cvsroot}"package="${fw.module.name}"command="checkout${fw.module.name}"/>
</target>
<targetname="check-out-sportal">
<deletedir="${sportal.module.name}"/>
<cvscvsRoot="${cvsroot}"package="${sportal.module.name}/build.xml"command="checkout${sportal.module.name}/build.xml"/>
</target>

<!--cvscheckout-->
<targetname="check-out">
<antcalltarget="check-out-fs"/>
<antcalltarget="check-out-fw"/>
<antcalltarget="check-out-sportal"/>
</target>

<!--buildXSPframework-->
<targetname="build">
<antcalltarget="build-all"/>
</target>

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

<targetname="do.subant.buildall">
<subanttarget="${target.name}">
<filelistdir="${basedir}SPORTAL">
<filename=""/>
</filelist>
</subant>
</target>

<targetname="deploywartoServer"description="Deploytoweblogic">
<echomessage="Deployed${portlet.warfile.name}toWeblogicAppServer"/>
<wldeployaction="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>

<targetname="archive">
<echomessage="${portlet.deployment.dir}/${portlet.warfile.name}"/>
<echomessage="deletestart"/>
<deletefile="${infoboard.remote.server}/${portlet.warfile.name}"/>
<deletefile="${ui.remote.dir}/${uim.carfile.name}"/>
<deletefile="${ui.remote.dir}/${spui.carfile.name}"/>
<!--<deletefile="${portal.war.lib}/healthcheck_monitor.jar"/>
<deletefile="${portal.war.lib}/HPPWebServicesFramework.jar"/>
<deletefile="${portal.war.lib}/ServicePortalSSO.jar"/>
<deletefile="${portal.war.lib}/SPCommonUtils.jar"/>
<deletefile="${portal.war.lib}/SPHPPTaglibs.jar"/>-->
<echomessage="deletefinish"/>
<copyfile="${portlet.deployment.dir}/${uim.carfile.name}"todir="${ui.remote.dir}"/>
<copyfile="${portlet.deployment.dir}/${spui.carfile.name}"todir="${ui.remote.dir}"/>
<copyfile="${portlet.deployment.dir}/${portlet.warfile.name}"todir="${infoboard.remote.server}"/>
<!--<copyfile="${portlet.deployment.dir}/healthcheck_monitor.jar"todir="${portal.war.lib}"/>
<copyfile="${portlet.deployment.dir}/HPPWebServicesFramework.jar"todir="${portal.war.lib}"/>
<copyfile="${portlet.deployment.dir}/ServicePortalSSO.jar"todir="${portal.war.lib}"/>
<copyfile="${portlet.deployment.dir}/SPCommonUtils.jar"todir="${portal.war.lib}"/>
<copyfile="${portlet.deployment.dir}/SPHPPTaglibs.jar"todir="${portal.war.lib}"/>-->
</target>

<pathid="weblogic.classpath">
<pathelementpath="${java.classpath}">
</pathelement>
<filesetdir="${weblogic.lib}">
<includename="weblogic.jar">
</include>
<includename="ojdbc14.jar">
</include>
<includename="wlclient.jar">
</include>
<includename="webservices.jar">
</include>
</fileset>
<filesetdir="${vignette.server.path}/lib/shared">
<includename="portlet.jar"/>
<includename="vgn-jsr-container-shared.jar"/>
<includename="vgn-jsr-container-taglib.jar"/>
<includename="vgn-portal-config.jar"/>
<includename="vgn-portal-log-spi.jar"/>
<includename="vgn-portal-naming-portlet.jar"/>
<includename="vgn-portal-shared.jar"/>
<includename="vgn-portlet-app-registry.jar"/>
</fileset>
<filesetdir="${vignette.server.path}/lib/ext">
<includename="jms.jar"/>
<includename="servlet.jar"/>
<includename="vgn-portal-discussionmigration.jar"/>
</fileset>
<filesetdir="${vignette.server.path}/lib">
<includename="oracle.jar">
</include>
<includename="mail.jar">
</include>
</fileset>
<filesetdir="${weblogic.home}/common/eval/pointbase/lib">
<includename="pbclient44.jar"/>
<includename="pbserver44.jar"/>
<includename="pbtools44.jar"/>
</fileset>
</path>
<!--
<targetname="stop-server">
<echomessage="******************************************************"/>
<echomessage="Stoptheweblogicmanagedserver"/>
<wlserverhost="localhost"port="7003"username="${weblogic.username}"password="${weblogic.password}"action="shutdown"forceshutdown="true"/>
<echomessage="******************************************************"/>
<echomessage="OK.Stoptheweblogicmanagedserversuccessfully"/>
</target>
-->
<targetname="reboot-server"description="Startsamanagedserver">
<!--NeedtoinvokelookupNodeManagerRuntimebeforewecanlookuptheruntimembean-->
<javaclassname="weblogic.Admin"failonerror="false"fork="true"classpathref="weblogic.classpath">
<argline="-url${weblogic.adminurl}"/>
<argline="-username${weblogic.username}"/>
<argline="-password${weblogic.password}"/>
<argline="INVOKE"/>
<argline="-mbean${weblogic.domain}:Name=${weblogic.machine},Type=Machine"/>
<argline="-methodlookupNodeManagerRuntime"/>
</java>

<javaclassname="weblogic.Admin"failonerror="false"fork="true"classpathref="weblogic.classpath">
<argline="-url${weblogic.adminurl}"/>
<argline="-username${weblogic.username}"/>
<argline="-password${weblogic.password}"/>
<argline="-mbean${weblogic.domain}:Location=${weblogic.adminservername},Name=${weblogic.machine},ServerRuntime=${weblogic.adminservername},Type=NodeManagerRuntime"/>
<argline="stopcluster-clusternamevigcluster"/>
</java>

<!--LookuptheNodeManagerRuntimeMBeanandgivethecommandtostartit.-->
<javaclassname="weblogic.Admin"failonerror="false"fork="true"classpathref="weblogic.classpath">
<argline="-url${weblogic.adminurl}"/>
<argline="-username${weblogic.username}"/>
<argline="-password${weblogic.password}"/>
<argline="-mbean${weblogic.domain}:Location=${weblogic.adminservername},Name=${weblogic.machine},ServerRuntime=${weblogic.adminservername},Type=NodeManagerRuntime"/>
<argline="startcluster-clusternamevigcluster"/>
</java>
</target>

<!--
<targetname="start-server"depends="stop-server">
<javaclassname="weblogic.Server"fork="yes"classpathref="weblogic.classpath"failonerror="true">
<syspropertykey="weblogic.Domain"value="${weblogic.domain}">
</sysproperty>
<syspropertykey="weblogic.NodeManager"value="${weblogic.home}/commom/nodemanager">
</sysproperty>
<syspropertykey="weblogic.RootDirectory"value="${weblogic.config.dir}">
</sysproperty>
<syspropertykey="weblogic.ConfigFile"value="${weblogic.config.name}">
</sysproperty>
<syspropertykey="weblogic.ListenPort"value="7003">
</sysproperty>
<syspropertykey="weblogic.ListenAddress"value="">
</sysproperty>
<syspropertykey="weblogic.management.server"value="${weblogic.adminurl}">
</sysproperty>
<syspropertykey="java.security.policy"value="${weblogic.home}/server/lib/weblogic.policy">
</sysproperty>
<syspropertykey="weblogic.Name"value="${weblogic.servername}">
</sysproperty>
<argline="-ms32m-mx200m">
</arg>
<argline="-Xnohup">
</arg>
<jvmargvalue="-Dcom.vignette.portal.installdir.path=C:VignettePortal"/>
</java>
<wlserverbeahome="${bea.home}"weblogichome="${weblogic.home}"dir="${weblogic.domain.dir}"adminserverurl="${weblogic.adminurl}"servername="vigcluster"username="${weblogic.username}"password="${weblogic.password}"action="reboot"/>
</target>
-->
<!--
<targetname="deploytoTomcat"depends="archive"description="Deploytotomcat">
<echomessage="DeployedexpandedwebarchivetoTomcat"/>
<copytodir="D:vignetteTomcat5.5webapps">
<filesetdir="..">
<includename="*.war"/>
</fileset>
</copy>
</target>
-->

<!--Asummarytargetusefulfortestingrecentchangeswithoutupdating
sourcecontrol.Deploystheexpandedversionofthewebarchive.-->
<!--
<targetname="expanded"depends="compile,test,archive,deploytoTomcat"/>
-->

<!--incrementisaplaceholderforasource-controlspecificwayofincrementing
thebuildversionofafile,suchasmanifest.mforcomponent.xml.-->
<targetname="increment"description="incrementsthebuildartifact">
<echomessage="Supplyyourincrementlogichere."/>
</target>

<!--label_and_getisaplaceholderforasource-controlspecificwayoflabeling
thetipandthengettingthatlabel,sothatthescriptwillbuildan
identifiableversionoftheportlet.-->
<targetname="label_and_get"description="labelssourcecontroltipandgetsfromthatlabel">
<echomessage="Supplyyourlabel_and_getlogichere."/>
</target>


<!--testisaplaceholderforathejunittask.-->
<targetname="test"description="runsunittests">
<echomessage="Supplyyourjunittaskhere."/>
</target>

<!--configuremakessureweb.xmlisproperlyconfiguredforuseonVAP.-->
<targetname="configure"description="configuresweb.xmlforuseonVAP">
<PortletPackageTooldir="../web-root/"contextroot="${portlet.context.root}"rename="false"failonerror="true"/>
</target>


<!--checkinisaplaceholderforasource-controlspecifictargetthataddsthe
newportletversiontosourcecontrol.-->
<targetname="checkin"description="checksthefinal.warintosourcecontrol">
<echomessage="Supplyyoursourcecontrolcheck-inlogichere."/>
</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
代码分析:
<targetname="check-out-fs">
<deletedir="${fs.module.name}"/>
<cvscvsRoot="${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等..
<taskdefname="wldeploy"classname="weblogic.ant.taskdefs.management.WLDeploy">
<classpathlocation="${weblogic.lib}/weblogic.jar"/>
</taskdef>
定义了weblogic deployer类的位置,我们在deploy to weblogic的时候使用的就是Deployer的类.这里将其引入,下面的代码就能够使用wldeploy这个标签了.
<targetname="deploywartoServer"description="Deploytoweblogic">
<echomessage="Deployed${portlet.warfile.name}toWeblogicAppServer"/>
<wldeployaction="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.
<targetname="reboot-server"description="Startsamanagedserver">
<!--NeedtoinvokelookupNodeManagerRuntimebeforewecanlookuptheruntimembean-->
<javaclassname="weblogic.Admin"failonerror="false"fork="true"classpathref="weblogic.classpath">
<argline="-url${weblogic.adminurl}"/>
<argline="-username${weblogic.username}"/>
<argline="-password${weblogic.password}"/>
<argline="INVOKE"/>
<argline="-mbean${weblogic.domain}:Name=${weblogic.machine},Type=Machine"/>
<argline="-methodlookupNodeManagerRuntime"/>
</java>

<javaclassname="weblogic.Admin"failonerror="false"fork="true"classpathref="weblogic.classpath">
<argline="-url${weblogic.adminurl}"/>
<argline="-username${weblogic.username}"/>
<argline="-password${weblogic.password}"/>
<argline="-mbean${weblogic.domain}:Location=${weblogic.adminservername},Name=${weblogic.machine},ServerRuntime=${weblogic.adminservername},Type=NodeManagerRuntime"/>
<argline="stopcluster-clusternamevigcluster"/>
</java>

<!--LookuptheNodeManagerRuntimeMBeanandgivethecommandtostartit.-->
<javaclassname="weblogic.Admin"failonerror="false"fork="true"classpathref="weblogic.classpath">
<argline="-url${weblogic.adminurl}"/>
<argline="-username${weblogic.username}"/>
<argline="-password${weblogic.password}"/>
<argline="-mbean${weblogic.domain}:Location=${weblogic.adminservername},Name=${weblogic.machine},ServerRuntime=${weblogic.adminservername},Type=NodeManagerRuntime"/>
<argline="startcluster-clusternamevigcluster"/>
</java>
</target>
重启服务器:这里重启的是cluster下面的基于nodemanager管理的服务器.
重启这个服务器需要在weblogic里面配置Machine.
Log in to the weblogic console.点击左边Machines 然后create 自己的machine,nodemanager的选项默认,然后把你要托管的管理服务器选上,重启weblogic.(不要选择adminserver).
关于重启非nodemanager的服务器(代码如下)
<targetname="start-server"depends="stop-server">
<javaclassname="weblogic.Server"fork="yes"classpathref="weblogic.classpath"failonerror="true">
<syspropertykey="weblogic.Domain"value="${weblogic.domain}">
</sysproperty>
<syspropertykey="weblogic.NodeManager"value="${weblogic.home}/commom/nodemanager">
</sysproperty>
<syspropertykey="weblogic.RootDirectory"value="${weblogic.config.dir}">
</sysproperty>
<syspropertykey="weblogic.ConfigFile"value="${weblogic.config.name}">
</sysproperty>
<syspropertykey="weblogic.ListenPort"value="7003">
</sysproperty>
<syspropertykey="weblogic.ListenAddress"value="">
</sysproperty>
<syspropertykey="weblogic.management.server"value="${weblogic.adminurl}">
</sysproperty>
<syspropertykey="java.security.policy"value="${weblogic.home}/server/lib/weblogic.policy">
</sysproperty>
<syspropertykey="weblogic.Name"value="${weblogic.servername}">
</sysproperty>
<argline="-ms32m-mx200m">
</arg>
<argline="-Xnohup">
</arg>
<jvmargvalue="-Dcom.vignette.portal.installdir.path=C:VignettePortal"/>
</java>
</target>