2016-05-23 62 views
0

我有一個使用Jenkins 2.0作爲構建和部署工具的構建服務器(win)。和WebSphere Portal 8.5.5.2的2個WAS服務器集羣(勝利)使用jenkins部署Websphere門戶Portlets作爲Web模塊

我使用ANT腳本成功構建了我的EAR和WAR文件。並使用jenkins「websphere deployment」插件將EAR和WAR部署到我的websphere portal 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進行安裝時界面或通過詹金斯插件顯示名稱將停留在web應用程序和上下文根也web應用程序(它不添加PA_前綴或/ wps/...)

我怎樣才能部署portlets web模塊使用工具XMLACCESS和管理GUI?

回答

1

雖然我不使用Jenkins,但我確實使用了XMLAccess來解決它,但我的問題或多或少都是相同的。

基本上有用於Portlet應用自動部署三種方法:在EAR文件

  1. 包裝您的portlet WAR和通過部署管理器進行部署/ 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。

在任何情況下,您都需要一個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螞蟻宏(請注意,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> 

然後我生成的WAR文件複製到一個的門戶網站節點使用SCP任務。只要它將部署管理器的連接設置正確,哪個節點並不重要。我建議在這裏使用SSH密鑰文件,當然,本地用戶需要獲得對服務器上installableApps目錄的寫入訪問權限。

<scp file="mywars/portlet.war" 
     todir="[email protected]:/opt/WebSphere85/PortalServer/installableApps" 
    keyfile="${deployment.scp.key}" 
    passphrase="${deployment.scp.passphrase}" trust="true" /> 

對於每個應用程序我有使用部署的XMLAccess XML文件(或者,如果缺少它,我有一個XSLT的Ant任務生成一個使用portlet.xml中的portlet描述符飛)。您可以在XMLAccess腳本中爲portlet設置唯一的名稱,使它們更容易在您希望通過XMLAccess部署的頁面中引用,還可以設置首選項並部署同一portlet的多個實例(而不是必須在portlet描述符中執行此操作)。您還可以使用xml訪問任務來發布頁面和其他內容,例如將您的測試環境設置爲運行自動化集成測試的狀態。

的XML任務僅僅是這樣的:

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

然後門戶將通過把它在部署管理器做休息。我還從RAD運行這些Ant腳本並在我們的開發服務器上快速更新。

+0

非常感謝羅伯爲廣泛和詳盡的專業答案。在複製了xmlaccess.bat文件中引用的所有jar之後,我還選擇了在構建服務器上運行xmlaccess的第二種方法。我也去爲每個portlet分離XML文件的方法,這樣我不必每次更新我剛剛調用的portlet使用我想要更新該portlet的XML文件編輯xml文件。我將使用ant腳本輸入要更新的portlet名稱,並調用這些portlet的相應xml。 –

0

您必須首先使用WAS Portal的管理GUI安裝portlet(因爲這需要XML Access來註冊portlet)。在初始部署之後,您可以使用WebSphere Deployment Plugin自動生成Portlet並將其部署到WAS Portal。您必須確保您匹配WDP配置中的應用程序名稱(即PA_app_name)的路徑(即/ wps /)&。您可以使用最新的WDP 1.4.2 beta插件來發布更新(您必須使插件僅使用更新,而不是從頭開始安裝)。在您的portlet自動更新後,您只需刷新網頁即可查看更新更改。

如果您爲部署指定WAR,則WDP應自動生成併爲該Portlet提供EAR。

-WDP建築師/開發人員