使用ant进行自动daily build.

本文介绍了一个使用Ant脚本实现WebLogic环境下自动化构建和部署的方案。涵盖了从版本控制系统检出代码、构建、部署到WebLogic集群及重启服务器的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境说明:我用的是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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值