内容


将移动 Worklight 应用程序的部署从手动部署转变为持续自动部署

使用 IBM UrbanCode Deploy 持续构建和部署移动 Worklight 应用程序

Comments

简介

为了响应客户从移动设备访问数据的需求,现在越来越多的应用程序包含了移动组件。转移到移动意味着开发团队必须适应移动开发独特的生命周期需求。团队必须经常发布新的移动应用程序版本来响应客户和测试人员的反馈,或者对后端系统(例如,更新数据库或 Web 服务)进行更改。为了紧跟用户需求,移动开发和运营团队需要实现较短的开发周期。这些团队转向持续集成和持续交付的 DevOps 实践。

持续集成是一种实践,在该实践中,开发人员反复将更改提交到源代码库,构建系统将这些更改集成到构建输出中。通过使用构建输出,持续交付会将工件部署到目标系统。由于持续集成增加了可用于测试的新构建版本数量,因此运营团队必须更频繁地更新部署环境。为了帮助管理部署的需求增加,运营团队应当使用持续交付原则。

持续交付帮助在不同的配置和后端系统上提供可重复的部署流程来安装和配置新输出(可能来自不同的构建输出),如图 1 所示。通过使用持续交付,可以尽快地验证代码,而原始开发人员可以在一有想法时就将代码更改包含到构建中。

图 1. 典型的移动持续交付拓扑结构
部署到不同环境的概述
部署到不同环境的概述

对于大多数团队来说,项目已经实现了持续集成。现在,团队需要通过一个移动界面改进其部署流程和应用程序交互。IBM® Worklight® Studio 为开发人员提供了一个理想的环境,开发人员可以通过 Web、混合、混合组合或原生移动应用程序将移动前端创建到多种目标设备类型。IBM® UrbanCode® Deploy 支持开发团队可在部署工件时实现持续交付。使用 UrbanCode Deploy,将自动化部署流程。团队使用拖放流程步骤以图形方式创建将在应用程序及其组件上执行的操作的顺序(流程)。IBM UrbanCode Deploy 的 IBM Worklight 插件使部署到包含 IBM® Worklight® Server 的环境成为可能。

本文列出的移动开发流程有助于您在 IBM Worklight Server 环境中将应用程序从开发和构建阶段前进到部署阶段,以便在移动设备上使用它们。本文附带的示例脚本有助于实现移动平台的持续交付。

移动开发流程概述

大体上讲,移动开发流程具有以下阶段,如图 2 所示:

  1. 开发应用程序。
  2. 将更改交付给 Source Code Management (SCM) 系统。
  3. 构建应用程序。
  4. 部署由构建生成的工件。
  5. 安装和使用移动应用程序。
图 2. 移动持续交付流程的概述
开发流程和相应的工具
开发流程和相应的工具

在本文中,将会使用以下工具来实现移动开发流程:

  • 要开发应用程序:IBM Worklight Studio 6.0.0
  • 要将更改交付给 SCM:IBM® Rational Team Concert™ 4.0.3
  • 要构建应用程序:Build System Toolkit 4.0.3
  • 要部署工件:IBM UrbanCode Deploy 6.0.0
  • 要充当应用程序服务器:IBM® WebSphere® Application Server 8.5.5
  • 要充当企业服务器:IBM Worklight Server 6.0.0
  • 要部署到 Worklight Server 环境:IBM Worklight 1.0 插件

注意:可以使用其他工具来实现流程。例如,可以使用 IBM® WebSphere® Application Server Liberty Profile 代替 IBM WebSphere Application Server。

开发和交付应用程序

当开发人员在 IBM Worklight Studio 中创建或修改移动应用程序,并在 Rational Team Concert SCM 系统中与团队共享项目时,开发流程就已经开始了。

构建应用程序

使用 IBM® Rational® Jazz™ Build Engine(Jazz Build System Toolkit 的一个组件)构建项目。接下来,会将构建生成的 IBM Worklight 工件添加到 CodeStation(一个工件存储库,是 IBM UrbanCode Deploy 的一部分)中。CodeStation 还会跟踪工件的版本并维护版本的副本。

部署和安装应用程序

使用 IBM UrbanCode Deploy 会将构建生成的工件自动部署到目标环境。对于混合移动应用程序,会将工件部署到 WebSphere Application Server 和 IBM Worklight Server。然后,可以从移动设备或模拟器/仿真器上的 Application Center(IBM Worklight 的一种功能,功能与内部应用程序商店类似)安装更新的应用程序,如图 3 所示。

更新应用程序时可以重复此过程。

图 3. 移动部署流程的概述
UrbanCode Deploy 流程的详细概述
UrbanCode Deploy 流程的详细概述

图 4 显示了移动开发流程的四个阶段。本文演示了如何使用 Worklight 插件来实现生命周期的部署阶段。

图 4. 移动开发流程的分解
移动开发流程的高级概述
移动开发流程的高级概述

设置持续集成和交付流程

要设置 DevOps 持续交付移动应用程序,请执行下列任务:

  1. 了解 IBM Worklight Studio 开发环境和工件
  2. 配置构建系统
  3. 配置 IBM Worklight Server
  4. 在 IBM UrbanCode Deploy 中配置部署,以便实现持续部署。
  5. 使用移动应用程序。

利用这组任务,可以轻松修改、重建和重新部署移动应用程序。使用此处列出的流程和本文包含的示例脚本,可自定义流程以适应自己的场景

了解 IBM Worklight Studio 开发环境和工件

本场景介绍了如何开发混合移动应用程序。使用混合移动应用程序方法,可以在服务器上包含常见的功能,这样,只需编写一次,就可以在不同的本地平台上使用此应用程序。

在 IBM Worklight Studio 中,移动应用程序是在 Worklight 项目中创建的,如图 5 所示。在本例中,项目名为 JKEBankMobile(注释 1),这是一种混合移动银行应用程序。

本项目包含以下部分:

  • 两个适配器(注释 2),定义服务访问,比如连接到慈善机构进行捐款的适配器。
  • 常见混合应用程序节点,比如银行登录页面,它包含在 common 文件夹中(注释 3)。常见应用程序节点被作为 IBM Worklight 应用程序 (.wlapp) 部署到 IBM Worklight Server。
  • 特定于操作系统的代码。示例 JKEMobile 应用程序包含 Android™ 和 iOS® 环境的支持(注释 4)。
图 5. Worklight 项目布局
Worklight 项目工件的详细视图

构建 IBM Worklight 项目时,会生成以下部分或全部工件:

  • 安装在移动设备上的 本地二进制文件。可以将此文件上传到 IBM Worklight Application Center。
  • 对于 IBM Worklight 混合应用程序,.wlapp 文件包含应用程序元数据和资源,比如 JavaScript 页面。此混合应用程序安装在 IBM Worklight Console 上。
  • 带有服务器端代码的适配器文件(比如访问数据源的文件)将被上传到 IBM Worklight Console。
  • IBM Worklight 项目 WAR 文件,包含特定于服务器的配置信息。此文件安装在应用程序服务器上。

配置构建系统

构建系统处理 IBM Worklight 工件和其他相关工件的构建。在此过程中,使用了基于 Rational Team Concert Apache® Ant 的构建版本来构建工件。构建环境的配置如下所示:

  • 一个构建工件的构建引擎
  • 一个构建 Worklight 工件的 IBM Worklight Ant JAR 文件
  • 一个构建原生应用程序的原生 SDK

在 Rational Team Concert 中,必须定义下列资源:

  • 构建工件的构建引擎。本示例使用了 Jazz Build Engine。创建构建引擎是为了在引擎名标识的机器上运行流程(例如,在图 6 的引擎列表中,default 正在等待工作)。
  • 定义特定于构建机器(运行 Jazz Build Engine)的属性的构建定义。在图 6 中,构建定义 Android build 被用于构建 Android 移动构件。构建机器需要包含构建任务的 IBM Worklight Ant JAR 文件来构建工件。从 IBM Worklight Server 获得 JAR 文件。
图 6. Rational Team Concert 构建配置
Rational Team Concert 构建系统配置

本文包含 示例构建脚本,您可以将它们用作模板来配置 IBM Worklight 移动应用程序构建环境。您还可以创建自己的构建脚本来构建 IBM Worklight 工件。要更新场景的示例构建脚本或者创建自己的构建脚本,请使用如清单 1、2、3 所示的 Ant 任务来构建 IBM Worklight 工件。这些 Ant 任务包含在 IBM Worklight Ant JAR 文件中,它们构建了混合应用程序、适配器文件和 Worklight 项目工件。

清单 1. 使用 app-builder Ant 任务的混合应用程序
<app-builder
        nativeProjectPrefix="Your project name"
        applicationFolder="Path to your source"
        outputFolder="Output location"
        worklightserverhost="Worklight Server host URL"/>
清单 2. 使用 adapter-builder Ant 任务的适配器文件
<adapter-builder
    folder="Path to your source"
    destinationFolder="Output location" />
清单 3. 使用 war-builder Ant 任务的 Worklight 项目
<war-builder projectfolder="Path to your project"
             destinationfolder="Output location"
             warfile="Output location and file name"
             classesFolder="Compiled classes folder"/>

接下来,通过调用原生 SDK 命令来构建原生应用程序。例如,为 Android 应用程序调用 android 命令,并为 iOS 应用程序调用 xcodebuildxcrun 命令。

当构建完成时,会将工件输出到构建输出位置。例如,在使用 Rational Team Concert 时,可以将工件保存到构建结果中,如图 7 所示。需要将这些构建工件添加到 IBM UrbanCode Deploy 的 CodeStation 中以进行部署。

图 7. 构建工件保存在构建结果中
构建 Worklight 工件保存在构建结果中

将构建工件作为组件版本添加到 CodeStation 中

IBM UrbanCode Deploy 中的应用程序可以表示完整的项目,而组件可用于表示子集(例如,整体银行应用程序的移动组件)。与源代码库类似,在 IBM UrbanCode Deploy 中,CodeStation 用于在组件级别管理版本以进行部署。示例构建脚本包含将工件添加到 IBM UrbanCode Deploy 组件版本的两种方法:

  • 版本控制文件系统
  • 将工件添加到 CodeStation 的命令行客户端

版本控制文件系统使用文件系统上的目录结构来维护版本。在此方法中,组件的根目录包含带有版本名称的子目录(例如,1.0.0 和 1.0.1,如图 8 所示)。要创建新版本,添加一个新目录以包含最新的构建内容。使用后续版本命名新目录(例如,将目录命名为 1.0.2)。新版本将出现在 CodeStation 中。

要将文件复制到版本控制文件系统,使用如清单 4 所示的 Ant 代码。

清单 4. 将文件复制到版本控制文件系统的 Ant 代码
<copy todir="Versioned file system directory">
    <fileset dir="Output location"/>
</copy>
图 8. C:\mobile 中的示例版本控制文件系统包含两个版本:1.0.0 和 1.0.1
具有两个版本的版本控制文件系统

一种替代方法是使用命令行客户端 (CLI) 创建版本并将文件上传到 CodeStation。CodeStation 将工件保存在 IBM UrbanCode Deploy 中,并且不需要访问文件系统就可以添加版本工件。使用下列命令:

  1. 在 CodeStation 中使用 CLI 创建新版本。例如:
    udclient -weburl https://localhost:8443 createVersion -component "Mobile" -name 1.0.0
  2. 使用下列 CLI 命令将工件添加到 CodeStation:
    udclient -weburl https://localhost:8443 addVersionFiles -component "Mobile" -version 1.0.0 -base C:\rootDirectory

还可以在 Ant 中编写这些 CLI 调用。例如,要添加工件,请使用下列代码,如清单 5 所示。

清单 5. 添加工件
<exec executable="${udclientPath}/udclient"
    failonerror="false"
    resultproperty="artifact-add-result"
    output="${logLocation}">
    <arg line="-weburl urbancode-web-url -username urbancode-username 
-password urbancode-password createVersion -component component-name -name version-name" />
</exec>

示例构建脚本

包含的示例 Ant 脚本基于 配置构建系统 部分所列的 Ant 任务构建了四种 IBM Worklight 工件(本地二进制、混合应用程序、适配器和 Worklight 项目)。包含了适用于 Android 和 iOS 操作系统的脚本。要自定义环境和项目的构建脚本,请参见构建脚本中的注释,以这些注释作为指导。

下面提供了部署到 UrbanCode Deploy 的两个脚本:

build-copy.xml
使用版本控制文件系统创建新组件版本。
build-push.xml
使用 CLI 推向 CodeStation。

在构建脚本中,当编译了 IBM Worklight 工件后,会将构建输出上传到 Rational Team Concert,并将其部署到 IBM UrbanCode。这里还提供了 Rational Team Concert 日志记录和输出文件,以帮助调试和跟踪构建版本。

示例脚本中的目标概述

示例脚本中的 Ant 目标提供了构建 IBM Worklight 工件的流程。您可以自定义这些脚本,以便根据需要为应用程序添加其他目标。

  1. 构建由 all 目标开始。
    <target name="all" depends="hybrid,androidNative,worklightProject,fileSystemPush" />
  2. 将调用 hybrid 目标,并使用 配置构建系统 部分介绍的 app-builderadapter-builder 任务来构建应用程序和适配器。还会将构建的适配器、混合应用程序和日志文件上传到 Rational Team Concert 构建结果中。
  3. 使用特定于移动的 SDK 构建原生应用程序,在 包含的示例 中,针对 Android 使用了 androidNative 目标。
  4. worklightProject 目标中使用 war-builder Ant 任务构建了 IBM Worklight 项目。
  5. fileSystemPush 目标中,构建输出被作为新组件版本添加到 IBM UrbanCode Deploy 中。

配置 IBM Worklight Server

部署环境是用来安装 IBM Worklight Server 和移动应用程序(例如,服务)所用的软件的地方。典型的部署环境包括 IBM Worklight Server(安装了 Application Center)、应用程序服务器和数据库。请注意,部署环境可以拥有一些远程元素。例如,IBM Worklight Server 可以在与移动应用程序所用的 REST 服务分开的独立机器上。

对于构建的每个移动应用程序,需要在 IBM Worklight Server 上配置控制台。可以将适配器(提供对 Web 服务等数据源的访问)和混合应用程序(包含应用程序元数据和 Web 资源)部署到控制台。

要创建 IBM Worklight Console:

  1. 配置 IBM Worklight 数据库和报表数据库,使用 手动方式 或者使用 Ant 任务
  2. 部署 IBM Worklight 项目,使用 手动方式 或者使用 Ant 任务

提示:可以使用 Ant 插件 代替命令行,在 IBM UrbanCode Deploy 中从流程内运行 Ant 任务。

IBM Worklight 安装中提供的示例 Ant 脚本 configure-was-derby.xml 配置了 Derby 数据库,并将应用程序安装到 WebSphere Application Server(可在 Worklight/WorklightServer/configuration-samples 中找到脚本)。例如,在命令行上使用以下两个步骤配置控制台并将其输出到日志文件:

  1. ant –f configure-was-derby.xml –l db.txt databases
  2. ant –f configure-was-derby.xml –l was.txt install

提示:如果要部署多个应用程序,请使用上下文根和惟一 ID 创建各个控制台。为此,请更新属性,如清单 6 所示。

清单 6. configure-was-derby.xml 脚本安装目标中的属性更新
<configureapplicationserver shortcutsDir="${shortcuts.dir}"
                            contextroot="/${worklight.project.context}"
                            id="${worklight.project.context}">

注意:在创建了 Application Center 和控制台后,您可能想要重启应用程序服务器。

在 IBM UrbanCode Deploy 中配置部署

您已经设置了构建,它在 CodeStation 中将构建工件添加到了新组件版本中。在图 9 中,可以在 UrbanCode Deploy 中看到两个组件版本示例。

图 9. 在 UrbanCode Deploy 中看到的组件版本
应用程序的版本 1.0.0 和 1.0.1
应用程序的版本 1.0.0 和 1.0.1

图 10 显示了组件版本内容,这是构建的输出。

图 10. 组件版本工件
在组件版本中保存的构建工件

在 IBM UrbanCode Deploy 中将文件添加到版本后,您需要定义流程,以便将 IBM Worklight 工件从构建版本部署到 IBM Worklight Server。

IBM UrbanCode Deploy 将应用程序部署映射到应用程序、其组件、采取行动的流程和部署的环境。图 11 显示了应用程序、组件及其流程之间的关系。

图 11. 应用程序、组件和流程
组件和应用程序关系
组件和应用程序关系

在本例中,如图 12 所示,应用程序 JKEMobile 有另一个应用程序 Application,它表示正在开发的整体银行项目。应用程序包含组件,组件是构成整个银行应用程序的部件,比如数据库、Web 和移动。此方法使得应用程序能够分解为可使用的部件,这样,当新组件版本可用时,就可以在低级别上采取部署行动。

图 12. 应用程序列表
在 UrbanCode Deploy 中定义的两个应用程序
在 UrbanCode Deploy 中定义的两个应用程序

如图 13 所示,JKEMobile – Android 组件定义 JKEMobile 应用程序的移动部署流程。

图 13. 组件列表
在 UrbanCode Deploy 中定义的两个组件
在 UrbanCode Deploy 中定义的两个组件

使用一些步骤 来定义流程,这些步骤是在组件或应用程序部署期间采取的行动。组件流程 使用流程图中的步骤定义实际要做的工作。在应用程序级别上,流程可用于安装各种组件,以便定义使用组件流程的总体部署。例如,应用程序流程 可以更新数据库中的表,启动应用程序服务器,并将原生移动应用程序部署到 Application Center。图 15 显示了一个使用五个步骤部署移动工件的组件流程示例。

对于每个步骤,可以自定义属性,使之与您的环境相匹配。例如,IBM Worklight 插件的 Upload Application to Application Center 步骤的属性如图 14 所示,该图还演示了如何自定义属性。在此步骤中,可以提供特定于 IBM Worklight Server 的信息,比如上下文根和原生应用程序名称(JKEMobile-debug.apk)。

流程步骤中的属性具有默认值。默认值通常是在 IBM UrbanCode Deploy 中所定义值的参考值,比如,当您创建组件或环境时。例如,在图 14 中,上下文的默认值是 ${p:component/applicationCenterContext},它表示使用在组件中为 applicationCenterContext 定义的值。

注意:可以为属性输入不同的值。

图 14. 将应用程序上传到 Application Center 步骤的属性
步骤属性和默认值示例
步骤属性和默认值示例

提示:在移动应用程序部署中,应按照下列顺序将部署到服务器的工件添加到流程中:

  1. 部署或更新 IBM Worklight 项目。
  2. 将适配器部署到 IBM Worklight Console。
  3. 将混合应用程序部署到 IBM Worklight Console(可以并行部署混合应用程序和适配器)。
  4. 将原生应用程序部署到 Application Center。

除了应用程序服务器插件(例如,WebSphere Application Server 插件)之外,图 15 使用 IBM Worklight 插件中提供的步骤在 IBM Worklight Server 上部署移动应用程序工件。这些是在组件流程中采取的行动:

  1. Download Artifacts 步骤从 UrbanCode Deploy 和代理计算机检索组件版本工件,以便与剩余流程步骤一起使用。
  2. 从 WebSphere 插件使用 Install or Update Application 步骤在应用程序服务器上更新 IBM Worklight 项目 Web 存档。此步骤使得更新任意配置设置成为可能。
  3. IBM Worklight 插件的两个步骤并行运行:Deploy Adapter to Worklight Server 和 Deploy Hybrid Application to IBM Worklight Server。这些步骤上传的工件为移动应用程序提供了服务器端资源。
  4. 成功完成这两个步骤后,会从 IBM Worklight 插件使用 Upload Application to Application Center 步骤将原生应用程序上传到 Application Center。
图 15. 部署 IBM Worklight 工件的组件流程示例
完整的 Worklight 部署流程示例
完整的 Worklight 部署流程示例

成功完成部署后,可以从 Application Center 安装到设备进行验证。可以使用同一部署流程构建移动应用程序的进一步更新,并将其重新部署到 IBM Worklight Server。

提示:环境 定义了部署所使用的资源,而且环境是用来运行流程的地方。在 IBM UrbanCode Deploy 中,可以定义多种部署环境,比如开发 (Dev) 和质量保证 (QA),如图 16 所示,可以自定义同一流程,以便将它部署到不同的配置。

图 16. 环境列表
两种应用程序环境:Dev 和 QA
两种应用程序环境:Dev 和 QA

在运行了部署流程后,工件可供 Application Center 使用,如图 17 所示。在本例中,部署了同一移动应用程序,但它针对的是不同的原生设备环境(iOS 和 Android)。

图 17. Application Center 中的示例应用程序
具有两个原生应用程序的 Application Center
具有两个原生应用程序的 Application Center

图 18 显示了已安装 JKEMobile 混合应用程序的 IBM Worklight Console,以及此应用程序的两个适配器:JKEAdapterJKELegacyAdapter

图 18. 控制台中的 Worklight 适配器和应用程序示例
具有适配器和应用程序的 Worklight Console
具有适配器和应用程序的 Worklight Console

扩展示例

您可以扩展本文提供的示例构建脚本,以便将它部署到多个环境。例如,如果 IBM Worklight 项目面向 Android 和 iOS,那么您可以:

  1. 组合构建脚本目标,以便将原生应用程序构建到某个构建文件。
  2. 为组件流程添加一个额外的步骤,如图 15 所示,以便将两个原生应用程序上传到 Application Center。

IBM Worklight 插件提供的步骤具有一定的灵活性,可创建适合移动应用程序的流程。例如,如果应用程序包含多个适配器,则流程中将包含多个适配器部署步骤。如图 15 所示,IBM Worklight 提供的步骤具有灵活性,可以自定义流程,以便将多个移动应用程序部署到同一或不同的 IBM Worklight Server。部署到同一服务器,以便使用在组件级别上设置的默认值作为依据。例如,在图 14 中,File 属性可以使用在组件级别上设置的 application 属性。在 Android 组件中,application 组件属性可以指向 JKEMobile-debug.apk,而在 iOS 组件中,可以将 application 组件属性设置为 iOS 应用程序归档 (.ipa) 工件。

除了部署移动工件的流程外,可以为企业中的其他业务流程添加部署流程,比如 Web 和数据库等。

结束语

开发团队正在寻找更快速地响应反馈的方式。持续集成有助于减少构建应用程序工件所需的时间。与持续部署结合使用,通过使用 IBM UrbanCode Deploy 为部署构建工件提供可重复的流程,可以缩短部署时间。由于移动开发团队通常具有较短的开发周期,因此 IBM Worklight 插件可以帮助创建一个可重复的流程,从而将移动应用程序工件部署到 IBM Worklight Server。此插件使得 DevOps 团队能够尽快地响应反馈,轻松地更新部署流程。本文提供的信息解释了使用 IBM UrbanCode Deploy 和 IBM Worklight 插件部署到 IBM Worklight Server 的步骤。

致谢

我想感谢 Derek Baron、Jinzi Huang、Mike Melick、Chris Jeffs,以及在编写本文时提供意见、评论和时间的所有人。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational, 移动开发
ArticleID=984282
ArticleTitle=将移动 Worklight 应用程序的部署从手动部署转变为持续自动部署
publish-date=09262014