我有一个构建服务器(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模块?
答案 0 :(得分:1)
我或多或少都有同样的问题,虽然我不使用Jenkins,但我确实使用XMLAccess来解决它。
自动部署portlet应用程序基本上有三种方法:
在所有情况下,您都需要一个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