自動構建和部署 MobileFirst Platform 工件,以此作爲持續交付過程的一部分

自動構建和部署 MobileFirst Platform 工件,以此作爲持續交付過程的一部分

將 IBM MobileFirst Platform (MFP) 應用服務器集成到一個持續交付管道中的一個主要要求是:自動升級 MobileFirst Application Server 的服務器端組件,包括項目 WAR 文件、應用程序和適配器。本文將向您展示如何爲多個環境自動化 MFP 組件的構建,自動化構建工件的部署,並將這些步驟集成到您的構建過程中。本文還提供了一些關於構建管理工具的建議。

Sam Marland, 顧問,IBM Software Services for WebSphere Mobile Practice, IBM

2015 年 6 月 04 日

  • +內容

簡介

IBM® MobileFirst Platform (MFP) 是一個平臺,用於開發混合、本機和 Web 應用程序。它被劃分爲服務器端組件和客戶端組件,藉助開箱即用的安全性、應用程序管理功能以及它對多種應用程序架構的支持,MFP 可以縮短交付時間。服務器端組件包括適配器,用於提供移動設備可以使用的數據,比如 JSON。您可以將該適配器連接到各種後端系統,從基於 SOAP 的 Web 服務到更現代的 RESTful 接口。客戶端庫提供了一些功能,這些功能可以:用來處理安全性、離線存儲和 iBeacons:用來在混合視圖和本機視圖之間傳遞數據;用於其他許多基於 Apache Cordova 技術的客戶端技術。在構建客戶端組件時:會創建一個 MFP 二進制文件 (.wlapp) 並將它部署到服務器,還會爲目標平臺創建二進制文件(.apk 適用於 Android,.ipa 適用於 iOS)。

要使用 MFP 框架來構建移動應用程序,可以使用 IBM MobileFirst Studio(一個基於 Eclipse 的 IDE),或者 IBM MobileFirst 命令行接口 (CLI)。當您使用這些工具時,它們會啓動一個構建所有適配器、所有應用程序(如果項目有多個應用程序)和所有自定義項目運行時(服務器 WAR 文件)的過程。在將項目部署到自己的服務器時,項目運行時是在部署適配器和應用程序之後安裝的。要將項目部署到測試環境中,必須專門爲該環境構建一些組件。CLI 工具無法構建這些組件,但 Eclipse 可以做到。您可以使用服務器控制檯來部署構建組件。使用 MFP 中提供的 Ant 任務,您可以創建一個持續集成 (CI) 管道,自動化構建過程、部署過程,以及服務器的創建和配置。

文章綜述

本文將向您展示如何找到和驅動 MFP 中提供的 Ant 任務。本文提供了一個示例項目,向您展示如何配置該項目來生成一個工作 CI 管道。然後,本文描述了構建和部署 MFP 組件所涉及的每個組件。 

先決條件

  • MFP Server -- 下載 MFP V6.3 Server
  • MFP CLI
  • MFP 提供了一些腳本來配置服務器,以便使用各種數據庫。爲了簡便起見,本文使用了 Apache Derby 數據庫。如果您喜歡使用 IBM DB2,採用的流程應該是近似的,只需使用不同的參數來使用不同的 Ant 任務。
  • Apache Ant
  • 一個 Unix shell,比如 Bash 或 Zsh
  • WebSphere Application Server Liberty Profile -- 您可以 下載單獨的 Liberty Profile Developer Edition,或者使用已經與 MFP CLI 打包在一起的 Liberty Profile 版本。

所需的文件和示例項目

您可以 從 GitHub 下載一個示例項目,該項目包含本文中使用的代碼。存儲庫包含一個 MFP 項目,該項目有一個簡單的 Web 應用程序,此應用程序有一個用來調用適配器的按鈕,適配器會將當前數據返回給用戶。該項目的結構如下所示,包括添加了一個叫做 ciBuild 的新目錄,它包含本文中描述的構建腳本。

ciBuild 目錄應該包含與 MFP CLI 工具打包在一起的 build.xml Ant 任務。configure-liberty-derby.xml 和 configure-liberty-db2.xml 文件與 MFP Server 打包在一起,包含 Ant 任務的定義,可用來創建完全由項目運行時使用的數據庫,以及管理服務。它們還包含部署服務 WAR 文件(worklightconsole.war 和 worklightadmin.war)的任務,以及項目運行時。

發現所需的 JAR 和 XML 文件

構建和部署 MFP 項目組件(比如適配器和 wlapp 文件)需要 build.xml Ant 文件。該文件位於 CLI installation 目錄中,和工具所使用的 JAR 文件在一起。/Applications/IBM/MobileFirst-CLI/mobilefirst-cli/node_modules/generator-worklight-server/lib directory 包含以下 JAR 文件:

  • worklight-ant-deployer.jar -- 在將通過構建生成的工件部署到 MFP 服務器時,需要使用此文件。
  • ant-contrib-1.0b3.jar -- 包含由 build.xml 文件使用的一些額外的 Ant 函數,比如 for 循環的定義,用於在適配器目錄上進行迭代。
  • worklight-jee-library.jar -- 包含產品的核心部分。在因爲沒有進行完整 MFP 安裝而需要配置服務器的時候,configure-liberty-derby.xml 腳本可以指向它。
  • worklightconsole.war 和 worklightadmin.war -- 服務 WAR,服務器管理需要它們。

該目錄中的 build.xml 文件也是運行 GitHub 項目所必需的。build.xml 文件包含構建和部署 MFP 組件所需的所有任務的定義。將 build.xml 複製到位於項目根目錄中的 ciBuild 目錄中。還有一個叫做 configure-liberty-db2.xml 的額外的 XML 文件,該文件是爲數據庫配置服務器所需要的,位於 /Applications/IBM/MobileFirst_Platform_Server/WorklightServer/configuration-samples/中。如果您使用的是 DB2,而不是 Derby,請將 configure-liberty-db2.xml 添加到 ciBuild 目錄。

MFP JAR 文件 (worklight-ant-builder.jar) 用於構建組件,比如項目運行時,適配器位於 ant-tools 目錄中,該目錄位於 /Applications/IBM/MobileFirst-CLI/mobilefirst-cli/node_modules/generator-worklight-server/ant-tools

要啓動 CI 構建,讓示例項目運行,請將所有這些 JAR 文件複製到您項目中的某個目錄中。執行此操作使您能夠從不同的位置(比如沒有安裝 MFP 的服務器)運行一個構建。管理腳本是您的 SCM 的一部分,這意味着這些腳本都受版本控制。ciBuild 目錄中的示例項目包含一個名爲 ant_jars 的文件夾,用來保存構建過程所需的 JAR 文件。在您的項目中創建一個 ciBuild 目錄,用該目錄來存儲構建相關的組件,比如示例項目中的組件。示例項目中的 ant_jars 目錄不包含任何 JAR 文件,因此您必須根據上面的指令複製它們。然後,ciBuild 目錄將包含以下 JAR 文件(用於示例項目的運行):

  • ant-contrib-1.0b3.jar 
  • hsqldb-2.2.5.jar 
  • worklight-ant-builder.jar 
  • worklight-ant-deployer.jar 
  • worklight-jee-library.jar

驅動 build.xml 

在示例項目中,有三個 Bash 腳本(shell 編程腳本),它們用相應的參數調用了 Ant 任務。mfp-ci-derby-install.sh 和 mfp-ci-build.sh 文件導入 common-functions.sh 文件並執行單個函數。

common-functions.sh

common-functions.sh 腳本包含構建過程的單個組件,這些組件被拆分成可由其他 Bash 腳本調用的函數。此結構爲開發 CI 管道過程中的組件重用提供了一個平臺。在開始執行 common-functions.sh 的時候,需要執行許多各種導出來實現成功的執行。相對於這些操作設置了一些變量,這些變量必須成功配置。

export USER="/Users/devworks"
export LIBERTY_TARGET="$USER/Documents/LibertyProfile"
export WORKLIGHT_INSTALL_DIR="/Applications/IBM/MobileFirst_Platform_Server"

上面的 $USER 變量是必需的,因爲需要一個絕對目錄來配置 MFP 服務器組件所使用的 Derby 數據庫。$LIBERTY_TARGET 是解壓的 WebSphere Application Server Liberty 服務器文件所在的位置,它應該包含一個 wlp 目錄。$WORKLIGHT_INSTALL_DIR 是安裝 MobileFirst Server 的位置。在 Mac 機器上,默認位置是 /Applications/IBM/MobileFirst_Platform_Server

common-functions.sh 中的第一個函數是 setEnvironment(),它包含特定於 CI 構建的目標環境的另一系列導出。默認值是本地創建和構建一個服務器,但您可以將它們更改爲一個遠程服務器。該函數允許您爲每個構建環境提供不同的值,這些環境包括開發、測試和生產環境。

mfp-ci-derby-install.sh

mfp-ci-derby-install.sh 腳本執行以下組件:

  • 停止現有的服務器(如果它正在運行)
  • 刪除 Liberty 服務器和 Derby 數據庫(如果它們存在)
  • 創建一個新的服務器
  • 爲管理服務和項目運行時安裝 Derby 數據庫
  • 安裝管理 WAR 文件(worklightconsole.war 和 worklightadmin.war
  • 安裝項目運行時
  • 啓動新創建的服務器

mfp-ci-build.sh

mfp-ci-build.sh 腳本執行以下組件:

  • 構建項目運行時(項目 WAR 文件)
  • 構建應用程序和適配器(.wlapp 和 .adapter 文件)
  • 執行與 mfp-ci-derby-install.sh 相同的步驟來部署項目運行時
  • 將已生成的構建工件部署到新創建的服務器

將環境構建和組件構建分離,這允許您選擇提供給 CI 服務器的控制級別。丟棄所有現有服務器併爲每個部署創建一個乾淨的服務器通常更可取一些。如果您不願意每次都丟棄環境,那麼您可以在 Liberty server apps 目錄中的現有環境的基礎上覆制新創建的自由運行時。

運行示例項目

要運行示例應用程序,請將必要的 XML 和 JAR 文件複製到相應的地方,並在開始執行 common-functions.sh 時編輯導出,如上所述。其他所有變量都相對於執行此腳本的 MFP 項目進行了設置。在完成這些編輯之後,在終端上執行 mfp-ci-build.sh 腳本。最終部署的應用程序、適配器和運行時都將位於 http://localhost:9080/worklightconsole/index.html,構建二進制文件位於項目 bin 目錄中。

構建組件:運行時、適配器和應用程序

您可以使用 build.xml 中的 build-war 任務定義來構建項目運行時。該構建是由 common-functions.sh 中的 buildWar() 函數驅動的。項目的位置、項目名稱和 Ant JAR 文件的位置都被傳遞到此函數,而且它是在設置環境變量之後由 mfp-ci-build.sh 調用的第一個組件。

類似的已定義函數構建了 .wlapp 和 .adapter 文件,而這些文件將會調用由 MFP 提供的 Ant 任務:build-Adapters 和 build-Apps。它們都在 common-functions.sh 中定義,通過 mfp-ci-build.sh 進行調用。它們採用了與 buildWar() 函數相同的方式來傳遞值。buildApps() 函數傳遞外部服務器 URL,確保應用程序在部署到服務時擁有正確的已配置端點。來自所有這些函數的輸出都位於項目根目錄的 bin 文件夾中。

部署組件

有許多種方式可用來部署項目運行時(WAR 文件)。

如果之前已經部署了 MFP 運行時,那麼您可以停止服務器,將新的 WAR 文件複製到舊文件上,並重新啓動服務器。此外,在使用安裝任務再次安裝服務器之前,您可以從服務器使用卸載 Ant 的任務來刪除配置。

另一種方法是從頭重新安裝服務器,這是首選,以爲它會在每次構建時提供了一個乾淨的、沒有使用過的環境。mfp-ci-derby-install.sh腳本會在創建一個新服務器並安裝所有必要組件和服務器運行時之前清理環境和數據庫。common-functions.sh 包含一個 deployWar() 函數,該函數適用於此過程涉及的所有步驟。每個函數都是在 common-functions.sh 中單獨定義的。在執行此步驟之後,您會有一個沒有應用程序或已部署的適配器的服務器,如下所示。

install() 函數是通過傳遞 Ant 任務的一個參數 ($1) 來調用的 -- 例如,adminstall 參數告訴該函數安裝管理和控制檯 WAR 文件。該函數被調用了 4 次,每個必須執行的任務調用一次:admdatabases、databases、adminstall 和 install。它傳遞參數的方式與其他函數相同。在以這種方式將參數傳遞給 Ant 任務時,如果變量沒有被正在調用的任務使用,那麼該變量是無效的。該任務必須傳遞數據庫的名稱和 Liberty Profile 的位置,在該位置上配置服務器。

要部署應用程序和適配器文件,可以使用 deploy-Apps 和 deploy-Adapters Ant 任務。它們都是通過 deployApps() 和 deployAdapters() 函數驅動的。和之前一樣,它們傳遞變量,包括 MFP 控制檯的用戶名和密碼,而且可以通過管理服務上傳它們。在示例項目中,它位於上下文根目錄 /worklightadmin 上,但它可以位於不同的目錄,所以請檢查現有 server.xml 文件來確定其上下文。

工具

Jenkins

Jenkins 一個開源持續集成和構建管理器。它會自動觸發構建,以及其他與構建軟件相關的任務,比如顯示測試圖形和其他構建數據。Jenkins 被用作構建管理器,擁有 1000 多個開源插件。還有其他一些構建管理器工具,比如 IBM Rational® Urban Code。

Git Webhooks

Webhooks 允許您在構建服務器與 Git 之間建立集成,訂閱某些事件。當事件被觸發時,您會收到一個 HTTP POST,指向指定的 URL。您可以使用 webhooks 來打開和關閉出問題的跟蹤系統中的票據,然後開始構建,或通過電子郵件給您發送相關狀態。

JNDI 覆蓋

您可以設置 Liberty 配置 server.xml 中的 JNDI 條目,然後可以覆蓋 MFP 服務器端組件中的相應變量。這種方法允許您構建自己的工件一次,並將它們部署到多個環境。例如,您可能擁有適配器文件,要求代理能夠訪問某個端點。當您將您的適配器從環境 A 移動到 環境 B 時,可以將該端點配置爲環境 A 的 worklight.properties 中的一個變量,然後使用環境 B 的 server.xml 中的一個 JNDI 查找覆蓋它。

使用 Bash 還是不使用 Bash?

本教程使用了 Bash 來控制 MFP 組件的構建和部署,但您也可以在管道中使用其他幾個工具完成此工作。一種方法是直接調用 Ant build.xml 文件,對每個環境的硬編碼配置進行適當的編輯。不要對產品的新版本採用這種方法,新版本中可能包括一個新的 build.xml 文件。在升級期間,不必編輯此文件,只需重新配置驅動它的方式,這樣可以節省時間。

構建移動應用程序二進制文件並將它部署到 AppCenter

用於構建被部署到移動設備的二進制文件的指令不包括在本教程中。但您可以通過使用 Ant 來構建混合 Android 項目,並使用 Xctool 構建 iOS 應用程序來自動化這個步驟。然後,您可以以無頭的方式,使用 MFP 中提供的工具將這些二進制文件部署到 MFP ApplicationCenter。關於這些指令,請參閱 MFP 知識中心內 用於上傳或刪除應用程序的命令行工具。通過適當地使用這兩個額外的元素,您課可以創建一個 CI 管道來構建環境、移動應用程序和適配器。然後,您可以將它們部署到 MFP 應用中心,測試團隊可以從這裏將它們下載到其設備。

結束語

本文向您展示瞭如何使用產品中提供的 Ant 任務來構建和部署 MFP 組件,比如適配器、wlapps 和 WAR 文件。本文展示了構建和部署這些組件所需的庫,還提供瞭如何使用它們的示例,這些都是構建一個持續交付管道的核心要求。示例項目爲那些想要自動化 MFP 項目和環境的構建和部署的人提供了一個起點。

參考資料 

學習

  • 移動開發參考資料
    • IBM developerWorks 移動開發專區
      最新的下載、教程、產品信息和其他開發人員參考資料可幫助您使用各種移動工具(包括 IBM MobileFirst Platform)開發企業級移動應用程序。
    • IBM MobileFirst Platform Developer Center
      大量參考資料,可幫助開始使用 IBM MobileFirst Platform 進行移動開發,該站點提供了平臺描述、教程、論壇和文檔。
    • IBM MobileFirst Platform 產品頁面
      IBM MobileFirst Platform 的概述,包括產品描述、案例研究、下載資料和其他開發人員參考資料
    • IBM MobileFirst Platform 信息中心
      一個提供了所有 IBM MobileFirst Platform 文檔的門戶,其中包括概念性任務,以及關於安裝、配置和使用 IBM MobileFirst Platform 來實現移動開發和部署的參考信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章