实现websphere8.5的自动部署

提供以下几种方式:

方式1.可以用jenkins现成的"WebSphere Deployer"插件来实现;

方式2.与maven集成

参考http://stackoverflow.com/questions/14808814/deploy-a-web-application-on-websphere-8-5-using-maven-3

比如用was-maven-plugin插件即可实现对war,ear包的自动部署,帮助请见:

https://github.com/orctom/was-maven-plugin


方式3.与ant集成     
http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.javadoc.doc/web/apidocs/com/ibm/websphere/ant/tasks/InstallApplication.html?lang=en
具体的实现:

 <?xmlversion="1.0" encoding="UTF-8"?>

<projectname="wasant" basedir="."default="InstallAndStart">

          <propertyname="was.root" value="/mstr/IBM/WebSphere/AppServer" />

    <propertyname="wsanttasks.jar"value="${was.root}/plugins/com.ibm.ws.runtime.jar"/>

    <property name="app.name"value="test1"/>

    <property name="ear.file"value="/root/myweb-1.0-SNAPSHOT.war"/>

    <property name="contextroot"value="test1"/>

    <property name="node"value="CIPBAKap0Node01"/>

    <property name="cell"value="CIPBAKap0Node01Cell"/>

    <property name="server"value="server1"/>

    <property name="cluster"value="tesss"/>

    <property name="username"value="wasadmin"/>

    <property name="password"value="******"/>

    <property name="host"value="10.1.94.64"/>

    <property name="port"value="8880"/>

    <property name="conntype"value="SOAP"/>

 <!-- 使用到的任务 -->

    <taskdef name="wsStartServer"classname="com.ibm.websphere.ant.tasks.StartServer"classpath="${wsanttasks.jar}" />

    <taskdef name="wsStopServer"classname="com.ibm.websphere.ant.tasks.StopServer"classpath="${wsanttasks.jar}" />

    <taskdef name="wsInstallApp"classname="com.ibm.websphere.ant.tasks.InstallApplication"classpath="${wsanttasks.jar}" />

    <taskdef name="wsUninstallApp"classname="com.ibm.websphere.ant.tasks.UninstallApplication"classpath="${wsanttasks.jar}" />

    <taskdef name="wsStartApp"classname="com.ibm.websphere.ant.tasks.StartApplication"classpath="${wsanttasks.jar}" />

    <taskdef name="wsStopApp"classname="com.ibm.websphere.ant.tasks.StopApplication"classpath="${wsanttasks.jar}" />

    <taskdef name="wsListApps"classname="com.ibm.websphere.ant.tasks.ListApplications"classpath="${wsanttasks.jar}" />

    <taskdef name="wsAdmin"classname="com.ibm.websphere.ant.tasks.WsAdmin"classpath="${wsanttasks.jar}" />

 

<!-- 卸载应用-->

 <target name="wsUninstallApp" description="UninstallApplication ${app.name}">

         <wsUninstallApp

                       wasHome="${was.root}"

                       application="${app.name}"

                       conntype="${conntype}"

                       host="${host}"

                        port="${port}"

                       user="${username}"

                       password="${password}"

                       failοnerrοr="fasle"/>

 </target>

 

  <!-- 安装应用-->

 <target name="wsInstallApp"depends="wsUninstallApp" description="Install Application${app.name}">

         <wsInstallApp

                       wasHome="${was.root}"

                       ear="${ear.file}"

                        options="-node${node} -cell ${cell} -server ${server} -appname ${app.name} -contextroot${contextroot} -usedefaultbindings"

                             conntype="${conntype}"

                       host="${host}"

                        port="${port}"

                       user="${username}"

                       password="${password}"

                       failοnerrοr="true"/>

 </target>

 

   <!-- 启动应用-->

 <target name="wsStartApp"description="StartApp Application ${app.name}">

         <wsStartApp

                       wasHome="${was.root}"

                       application="${app.name}"

                       conntype="${conntype}"

                       host="${host}"

                       port="${port}"

                        user="${username}"

                       password="${password}"

                       failοnerrοr="true"/>

 </target>

 

 <!-- 实际的任务组合    -->

 <target name="InstallAndStart"description="Install and Start ${app.name}">

  <antcalltarget="wsInstallApp"/>

  <antcalltarget="wsStartApp"/>

 </target>

</project>

 


注意:

a.installapp 目标将调用 uninstallapp 目标来确保企业应用程序已经卸载(如果已安装)

b.执行./ws_ant.sh (该脚本是安装webshere时自带的,位于安装目录的bin目录下)


方式4.wasadmin  命令行(注意:应能ping同对方主机名,不然安装应用的时候出错)具体实现:

a.卸载应用./wsadmin.sh -conntype SOAP -host10.8.24.29 -port 8880 -user wasadmin -password ****** -lang jacl -c'$AdminApp uninstall test'

b.安装应用./wsadmin.sh -conntype SOAP -host10.8.24.29 -port 8880 -user wasadmin -password ****** -lang jacl -c'$AdminApp install /root/myweb-1.0-SNAPSHOT.war {-node lvweiguang-PCNode01-cell lvweiguang-PCNode01Cell -server server1 -appname test  -contextroot/test -usedefaultbindings}'

c.启动应用./wsadmin.sh -conntype SOAP -host10.8.24.29 -port 8880 -user wasadmin -password ****** -lang jacl -c'$AdminControl invoke [$AdminControl queryNamestype=ApplicationManager,node=lvweiguang-PCNode01,*] startApplication test'

注意:

1.当只有一个节点和server的时候-node lvweiguang-PCNode01 -cell lvweiguang-PCNode01Cell -serverserver1这些不需要指定;

2.不管用哪种方式部署,第一次部署,连接的时候都需要先进行ssl 认证,点Y回车即可,以后就不需要了。

 

另外关于“was的自带lib会存在与war包中的web-inf/lib存在冲突版本的jar包,所以war包安装完毕后,要在部署的war包的管理模块中设置:类装入器顺序 为“类已装入并且是先使用本地类装入器(父类最后)”问题的解决方案:

1.通过was自身的设置做全局性的调整;

  1).在应用层级设置 “类装入和更新检测”,其中装入顺序为“<label title="指定是否在使用应用程序类装入器之前使用父类装入器来装入类。" for="mode_PARENT_LAST" style="">类已装入并且是先使用本地类装入器(父类最后)”,war类装入策略为“单一”。

     这样在安装部署war包的时候通过AdminConfig可以设置该应用的类加载策略和顺序。

方法一:was命令实现

set appid[$AdminConfig getid /Deployment:pa/]    

#Identify thedeployed object and set    

set deployedApp[$AdminConfig showAttribute $appid deployedObject]    

set classldr[$AdminConfig showAttribute $deployedApp classloader]    

#show currentattribute values  

$AdminConfig showall$classldr    

#modify          

$AdminConfig modify$classldr {{mode PARENT_LAST}}  

如有需要更改warClassLoaderPolicy(SINGLE or MULTIPLE)  

$AdminConfigshowAttribute $deployedApp warClassLoaderPolicy  

$AdminConfig modify$deployedApp {{warClassLoaderPolicy SINGLE}}    

$AdminConfigsave    

方法二:ant实现代码:

  <?xml version="1.0"encoding="UTF-8"?>

<projectname="wasant" basedir="."default="InstallAndStart">

          <propertyname="was.root" value="/mstr/IBM/WebSphere/AppServer" />

    <propertyname="wsanttasks.jar"value="${was.root}/plugins/com.ibm.ws.runtime.jar"/>

    <property name="port"value="8880"/>

    <property name="conntype"value="SOAP"/>

         

   <spanstyle="color:#ff0000;"> <propertyname="app.war.loadpolicy" value="SINGLE" />  

    <propertyname="app.reload.enabled" value="true" /> 

    <propertyname="app.reload.interval" value="20" /> 

    <propertyname="app.war.loadpolicy" value="SINGLE" /> 

    <propertyname="app.class.load.mode" value="PARENT_LAST" /> 

                   

    <propertyname="setDeployments"   

                value="set deployments[$AdminConfig getid /Deployment:${appname}/]"/> 

    <propertyname="setDeploymentsObject"   

                value="setdeploymentObject [$AdminConfig showAttribute $deployments deployedObject]"/> 

          <propertyname="modifyWarClassLoaderPolicy"   

                value="$AdminConfig modify$deploymentObject {{warClassLoaderPolicy SINGLE}}"/> 

    <propertyname="setClassLoaderMode" 

                    value="set classloader[$AdminConfig showAttribute $deploymentObject classloader]" /> 

    <propertyname="modifyClassLoaderMode"   

                value="$AdminConfig modify$classloader {{mode ${app.class.load.mode}}}"/></span>

    

 <!-- 使用到的任务 -->

    <taskdef name="wsStartServer"classname="com.ibm.websphere.ant.tasks.StartServer"classpath="${wsanttasks.jar}" />

    <taskdef name="wsStopServer"classname="com.ibm.websphere.ant.tasks.StopServer"classpath="${wsanttasks.jar}" />

    <taskdef name="wsInstallApp"classname="com.ibm.websphere.ant.tasks.InstallApplication"classpath="${wsanttasks.jar}" />

    <taskdef name="wsUninstallApp"classname="com.ibm.websphere.ant.tasks.UninstallApplication"classpath="${wsanttasks.jar}" />

    <taskdef name="wsStartApp"classname="com.ibm.websphere.ant.tasks.StartApplication"classpath="${wsanttasks.jar}" />

    <taskdef name="wsStopApp"classname="com.ibm.websphere.ant.tasks.StopApplication"classpath="${wsanttasks.jar}" />

    <taskdef name="wsListApps"classname="com.ibm.websphere.ant.tasks.ListApplications"classpath="${wsanttasks.jar}" />

    <taskdef name="wsAdmin"classname="com.ibm.websphere.ant.tasks.WsAdmin"classpath="${wsanttasks.jar}" />

 

<!-- 卸载应用-->

 <target name="wsUninstallApp"description="Uninstall Application ${app}">

         <wsUninstallApp

                       wasHome="${was.root}"

                       application="${appname}"

                       conntype="${conntype}"

                       host="${host}"

                       port="${port}"

                        user="${username}"

                       password="${password}"

                       failοnerrοr="false"/>

 </target>

 

  <!-- 安装应用-->

 <target name="wsInstallApp"depends="wsUninstallApp" description="Install Application${appname}">

         <wsInstallApp

                       wasHome="${was.root}"

                       ear="${earfile}"

                        options="-appname${appname} -contextroot ${appname} -usedefaultbindings"

                             conntype="${conntype}"

                        host="${host}"

                       port="${port}"

                       user="${username}"

                       password="${password}"

                       failοnerrοr="true"/>

 </target>

  <span style="color:#ff0000;"><!-- 设置模块类加载策略-->

   <targetname="wsSetWarLoadPolicy" description="set war load policy${app.war.loadpolicy}"> 

        <echo>change WAR ClassloaderPolicy {SINGLE=Application, MULTIPLE=Module} to${app.war.loadpolicy}</echo> 

        <wsAdmin   

            user="${username}"    

           command="${setDeployments};${setDeploymentsObject};${modifyWarClassLoaderPolicy}" 

           password="${password}"  

            host="${host}"   

           conntype="${conntype}" 

            port="${port}" 

            wasHome="${was.root}"/>

    </target> 

 

    <!-- 设置模块类加载顺序-->

 <targetname="wsSetClassLoaderMode" description="set classloader mode to${app.class.load.mode}"> 

        <echo>change class load moode to${app.class.load.mode}</echo> 

        <wsAdmin   

            user="${username}"   

           command="${setDeployments};${setDeploymentsObject};${setClassLoaderMode};${modifyClassLoaderMode}" 

           password="${password}"  

            host="${host}"   

            conntype="${conntype}" 

            port="${port}" 

            wasHome="${was.root}"/>

    </target>  </span>

   <!-- 启动应用-->

 <target name="wsStartApp"description="StartApp Application ${appname}">

         <wsStartApp

                       wasHome="${was.root}"

                       application="${appname}"

                       conntype="${conntype}"

                       host="${host}"

                       port="${port}"

                        user="${username}"

                       password="${password}"

                       failοnerrοr="true"/>

 </target>

 

 <!-- 实际的任务组合    -->

 <target name="InstallAndStart"description="Install and Start ${appname}">

  <antcalltarget="wsInstallApp"/>

  <antcall target="wsStartApp"/>

  <antcalltarget="wsSetWarLoadPolicy" /> 

  <antcalltarget="wsSetClassLoaderMode"/> 

 </target>

</project>



2.在命令行或ant实现安装的时候添加参数实现,对web模块加载顺序的修改-----父亲优先(PARENT_FIRST)或者父亲最后(PARENT_LAST);

方案一:was命令行

set appid[$AdminConfig getid /Deployment:pa/]   

set deployedApp[$AdminConfig showAttribute $appid deployedObject]

set modules[$AdminConfig showAttribute $deployedApp modules]

set module [stringtrim $modules ?{}?]

set classldr[$AdminConfig showAttribute $module classloader]

$AdminConfig show$classldr

$AdminConfig modify$classldr {{mode PARENT_LAST}}

$AdminConfig save

 

其输出Log如下:

wsadmin>set appid[$AdminConfig getid /Deployment:pa/]

pa(cells/PASDEVap0Node01Cell/applications/pa.ear/deployments/pa|deployment.xml#Deployment_1413429878953)

wsadmin>setdeployedApp [$AdminConfig showAttribute $appid deployedObject]

(cells/PASDEVap0Node01Cell/applications/pa.ear/deployments/pa|deployment.xml#ApplicationDeployment_1413429878953)

wsadmin>setmodules [$AdminConfig showAttribute $deployedApp modules]

{(cells/PASDEVap0Node01Cell/applications/pa.ear/deployments/pa|deployment.xml#WebModuleDeployment_1413429878953)}

wsadmin>setclassldr [$AdminConfig showAttribute(cells/PASDEVap0Node01Cell/applications/pa.ear/deployments/pa|deployment.xml#WebModuleDeployment_1413429878953)classloader]

(cells/PASDEVap0Node01Cell/applications/pa.ear/deployments/pa|deployment.xml#Classloader_1413429878954)

wsadmin>$AdminConfigshow $classldr

{libraries {}}

{mode PARENT_FIRST}

 

方案二:ant实现

增加如下代码:

<propertyname="setDeployments"   

                value="set deployments[$AdminConfig getid /Deployment:${appname}/]"/> 

   <property name="setDeploymentsObject"   

                value="setdeploymentObject [$AdminConfig showAttribute $deploymentsdeployedObject]"/> 

         <propertyname="setModules"   

                value="set modules[$AdminConfig showAttribute $deploymentObject modules]"/>

         <propertyname="setModule"   

                value="set module [stringtrim $modules ?{}?]"/>

          <property name="setClassLoaderMode" 

                value="set classloader[$AdminConfig showAttribute $module classloader]" /> 

   <property name="modifyClassLoaderMode"   

                value="$AdminConfig modify$classloader {{mode ${app.class.load.mode}}}"/>

 <!-- 设置WEB模块类加载顺序-->

 <targetname="wsSetClassLoaderMode" description="set classloader mode to${app.class.load.mode}"> 

       <echo>change class load moode to${app.class.load.mode}</echo> 

       <wsAdmin   

           user="${username}"   

            command="${setDeployments};${setDeploymentsObject};${setModules};${setModule};${setClassLoaderMode};${modifyClassLoaderMode}" 

           password="${password}"  

           host="${host}"   

           conntype="${conntype}" 

           port="${port}" 

           wasHome="${was.root}" />

   </target> 

3.对应用程序做更新操作-----第一次需手动部署;

  命令行实现:

./wsadmin.sh -host10.8.24.29 -port 8880 -user wasadmin -password ****** -c '$AdminApp updatecap app  {-operation update  -contents/root/myweb-1.0-SNAPSHOT.war   -usedefaultbindings}'   //需要注意的是当更新的不是同一名字的war包时类装载器会恢复默认设置。

 


  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值