使用jenkins将websphere门户Portlet部署为Web模块

时间:2016-05-23 10:42:00

标签: jenkins-plugins web-deployment portlet websphere-portal

我有一个构建服务器(win),Jenkins 2.0作为构建和部署工具。和WebSphere Portal 8.5.5.2的2个WAS服务器集群(win)

我使用ANT脚本成功构建了我的EAR和WAR文件。并使用jenkins“websphere deployment”插件将EAR和WAR部署到我的websphere门户8.5.5.2。

WAR文件是Web模块portlet。如果我选择手动部署Web模块,我可以使用XMLACCESS脚本或通过管理 - > Web模块GUI。

如果我使用jenkins部署WAR,它会将它们转换为EAR文件并将它们部署到门户网站,并且它不会在管理控制台中显示为Web模块。

我注意到在从管理Web模块GUI安装WAR(例如“webapp.war”)时,它将显示名称添加为PA_webapp,将上下文根添加为/ wps / webapp,但是在通过/ ibm / console界面进行安装时或者通过jenkins插件显示名称将保留webapp,上下文根也是webapp(它不会添加PA_前缀或/ wps / ...)

如何使用XMLACCESS和管理GUI以外的工具正确部署portlet Web模块?

2 个答案:

答案 0 :(得分:1)

我或多或少都有同样的问题,虽然我不使用Jenkins,但我确实使用XMLAccess来解决它。

自动部署portlet应用程序基本上有三种方法:

  1. 将您的portlet WAR打包到EAR文件中,并通过Deployment Manager / WAS进行部署。这就是所谓的预先部署'这就是詹金斯所做的。放入EAR之后,必须使用XMLAccess完成部署,以便门户知道EAR包含包含portlet的Web应用程序。如果您已通过XMLAccess部署并注册一次,则可以通过部署新的EAR文件继续部署应用程序的更新。
  2. 使用WAR文件并通过门户网站进行部署,类似于通过GUI进行操作的方式;然后Portal将使用Deployment Manager / WAS进行部署。然后它将在WAS(PA_YourModule)中生成应用程序名称。为此,您需要将WAR文件上载到服务器。
  3. Generate a PAA file。它包含WAR文件和XMLAccess文件。你需要为这个启动ConfigEngine。
  4. 在所有情况下,您都需要一个XMLAccess脚本来在门户中注册应用程序,这些脚本在方法上会略有不同。在第一种方法中,XMLAccess脚本将在EAR文件中引用WAR,而web-app标记将具有属性predeployed="true"

    <?xml version="1.0" encoding="UTF-8"?>
    <request type="update" version="8.0.0.1" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:noNamespaceSchemaLocation="PortalConfig_8.0.0.xsd">
        <portal action="locate">
            <web-app action="update" active="true" domain="rel" predeployed="true" 
            removable="true" uid="{id from portlet.xml}">
        <url>file://localhost/$predeployed_root$/MyEARfile.ear/MyPortlets.war</url>
      </portal>
    </request>
    

    在第二种方法中,您的XMLAccess脚本将如下所示,您必须自己将war文件放在目录中:

    <?xml version="1.0" encoding="UTF-8"?>
    <request type="update" version="8.0.0.1"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="PortalConfig_8.0.0.xsd">
        <portal action="locate">
            <web-app action="update" active="true" domain="rel" uid="{id from portlet.xml}">
                <url>file:////opt/WebSphere85/PortalServer/installableApps/MyPortlets.war</url>
            </web-app>
        </portal>
    </request>
    

    您可以使用\PortalServer\doc\xml-samples中的示例导出各种XMLAccess脚本。

    我选择了第二种方法,因为我仍然希望通过门户网站GUI手动更新portlet应用程序,并且已经以这种方式部署了许多内容。所以我所做的是在构建服务器上设置XMLAccess。我将描述here的JAR复制到构建服务器上,并创建了一个XMLAccess Ant宏(请注意,IBM文档显示了不正确的JAR)以运行XMLAccess脚本:

    <path id="XMLAccess.libraryclasspath">
      <pathelement location="${WPS_80_DIR}/base/wp.xml.client/bin/wp.xml.client.jar"/>
      <pathelement location="${WPS_80_DIR}/base/wp.base/shared/app/wp.base.jar"/>
      <pathelement location="${WPS_80_DIR}/base/wp.engine.impl/shared/app/wp.engine.impl.jar"/>
      <pathelement location="${WPS_80_DIR}/base/wp.utilities.streams/shared/app/wp.utilities.streams.jar"/>
      <pathelement location="${WAS_80_DIR}/lib/j2ee.jar"/>
      <pathelement location="${WAS_80_DIR}/lib/bootstrap.jar"/>
      <pathelement location="${WAS_80_DIR}/java/jre/lib/ext/ibmjceprovider.jar"/>
      <pathelement location="${WAS_80_DIR}/plugins/com.ibm.ws.runtime.jar"/>
      <pathelement location="${WAS_80_DIR}/plugins/com.ibm.ws.emf.jar"/>
      <pathelement location="${WAS_80_DIR}/plugins/org.eclipse.emf.ecore.jar"/>
      <pathelement location="${WAS_80_DIR}/plugins/org.eclipse.emf.common.jar"/>
    </path>
    
    <macrodef name="xmlaccess">
      <attribute name="script"/>
      <sequential>
        <java  dir="${module}" classname="com.ibm.wps.xmlaccess.XmlAccess" logError="true">
          <classpath refid="XMLAccess.libraryclasspath" />
            <arg value="-user"/>
            <arg value="wpsadmin"/>
            <arg value="-url"/>
            <arg value="http://portalhost:10040/wps/config"/>
            <arg value="-password"/>
            <arg value="passw0rd"/>
            <arg value="-in"/>
            <arg value="@{script}"/>
        </java>
      </sequential>
    </macrodef>
    

    然后我使用SCP任务将生成的WAR文件复制到其中一个门户节点。只要将连接设置正确地部署到部署管理器,哪个节点无关紧要。我建议在这里使用SSH密钥文件,当然本地用户需要获得对服务器上installableApps目录的写访问权。

    <scp file="mywars/portlet.war" 
            todir="deploymentuser@portalhost:/opt/WebSphere85/PortalServer/installableApps" 
        keyfile="${deployment.scp.key}" 
        passphrase="${deployment.scp.passphrase}" trust="true" />
    

    对于每个应用程序,我都有一个用于部署的XMLAccess xml文件(如果缺少,我有一个Ant XSLT任务,可以使用portlet.xml portlet描述符动态生成一个)。您可以在XMLAccess脚本中设置portlet的唯一名称,使它们更容易在您可能希望通过XMLAccess部署的页面中引用,还可以设置首选项并部署同一portlet的多个实例(而不是必须在portlet描述符中执行此操作)。您还可以使用xml访问任务来发布页面和其他内容,例如将测试环境设置为运行自动集成测试的状态。

    xml任务就是这样:

    <xmlaccess script="deploy-portlets.xml" />
    

    然后,门户将通过将其放入部署管理器来完成剩下的工作。我还从RAD运行这些Ant脚本,并在我们的开发服务器上进行快速更新。

答案 1 :(得分:0)

您必须首先使用WAS Portal的管理GUI安装portlet(因为这需要XML Access来注册portlet)。在初始部署之后,您可以使用WebSphere Deployment Plugin自动生成Portlet并将其部署到WAS Portal。你必须确保你匹配路径(即/ wps /)&amp; WDP配置中的应用程序名称(即PA_app_name)。您可以使用最新的WDP 1.4.2 beta插件发布更新(您必须使插件仅使用更新,而不是从头开始安装)。在自动更新portlet之后,您只需刷新网页即可查看更新更改。

如果为部署指定WAR,WDP应自动为portlet生成和EAR。

-WDP Architect / Developer