持续集成持续部署持续交付_持续集成和部署

适用于职业高尔夫和网球的预测云计算,第5部分

内容系列:

此内容是该系列的第8部分#: 预测云计算的专业高尔夫球场和网球场,第5部分

请继续关注本系列中的其他内容。

该内容是该系列的一部分: 专业高尔夫和网球的预测云计算,第5部分

请继续关注本系列中的其他内容。

在本教程中,我们概述了为PCC设计和实现的持续集成和持续部署体系结构。 我们讨论了Jenkins持续集成(CI)和IBM UrbanCode™Deploy的使用,展示了如何在Jenkins CI中实施我们的单元和集成测试,并描述了Jenkins和IBM UrbanCode Deploy之间的联系。 我们还将展示IBM UrbanCode如何能够自动部署到测试环境,并使开发人员能够将更改推送到预生产和生产环境,而无需手动操作或提高系统用户权限。

图1.持续集成/交付架构
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

詹金斯持续整合

持续集成是一种通过推或拉机制自动检测源代码更改,以及随后将该源代码构建到可以自动测试的工件中的实践。 CI系统通过卸载并自动执行构建和测试过程来促进测试和小的更改的传播。 我们的PCC已广泛使用CI系统,允许开发人员检入对源代码管理的更改,以便自动测试代码并将其部署到测试环境中。

持续集成持续部署持续交付_持续集成和部署

Jenkins通过使用作业定义执行构建和测试。 作业定义包含各种信息,包括但不限于源位置,轮询间隔,使用的插件,构建步骤和条件。 构建的组件可以在任何组合中进行混合和配置,从而可以灵活地匹配任何构建和测试目标。 Jenkins提供了许多项目类型,包括自由式,Maven,工作流和多配置。 对于PCC,我们混合使用了自由式和Maven类型的项目。

尽管Jenkins提供了许多内置功能来进行持续集成,但可以通过使用插件来广泛地定制系统。 预测云计算广泛使用了Jenkins插件。 该项目使用的一些插件包括Maven集成插件,Maven存储库服务器插件,Artifactory插件,条件BuildStep插件和UrbanCode Deploy插件。

图2描述了用于为PCC提供连续集成服务的15个Jenkins作业。 通常,每个作业代表PCC的不同功能,可能需要单独的编译,测试或打包。 左侧的彩色圆圈表示最后一次构建的状态,其中蓝色表示成功,红色表示失败,而黄色表示不稳定。 圆圈旁边的天气图标指示最新版本的运行状况。

表1列出了Jenkins中的所有项目及其支持BigEngine的功能。

表1. Jenkins中的项目
项目 功能
大引擎 为大数据执行多线程作业运行,为RESTful服务建立端点,并为WebSphere®Liberty Profile进行配置
大引擎集成 执行BigEngine项目的集成测试
设定档 解析应用程序,网球,高尔夫和整体比赛配置
因素 高尔夫和网球模拟中的特征提取算法
HTTP代理服务器 Servlet代理从BigEngine到Web前端的流量代理
预测云数据库 建立liquibase变更的项目
球拍流 在InfoSphere Streams中提取情感分析的项目
剧本 用于管理BigEngine的脚本集合
共享 PCC项目之间共享的元素
共享集成 共享项目的集成测试
StreamsLogAggregator InfoSphere®Streams项目可实时分析Web日志
Twitter分析 InfoSphere Streams项目可对推特卷执行分析
推特出口商 InfoSphere Streams项目将Twitter feed导出到其他InfoSphere Streams流程
推特 InfoSphere Streams项目从Twitter API读取
WebLogAnalyzer Java™程序,用于分析Web日志内容以从内容中提取播放器提及。

图2中的BigEngine作业是PCC的主要作业。 这项工作建立了PCC用来预测站点流量的分析和决策引擎。 BigEngine-Integration作业对BigEngine执行耗时的集成测试,并与BigEngine作业隔离开来,以加快小更改的交付时间。 TwitterAnalysis,TwitterExporter和StreamsLogAggregator作业用于创建工件以在InfoSphere Streams中进行部署。 其他项目,例如WebLogAnalyzer,提供了支持PCC的大数据功能。

图2. PC的Jenkins连续集成作业
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图3包含BigEngine项目的高级配置指令。 需要注意的主要元素是,Jenkins配置为通过关闭所有比最近300个构建更旧的构建器日志来丢弃旧的构建信息。 这些构建和构建日志对于准确查找和跟踪构建失败的方式和原因非常有用。 此外,此构建被限制为仅在Jenkins主节点上运行。 其他构建,例如与InfoSphere Streams相关的构建,仅在支持流的Jenkins客户端上执行。

图3. Jenkins中的BigEngine作业配置
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

如图4所示,BigEngine的源代码管理配置描述了构建系统如何访问和发现源代码存储库中的更改。 PCC使用Git作为源代码存储库。 定义了对内部Git服务器的访问,其中包括在构建的源代码管理部分中从该存储库读取和写入所需的凭据。 分支说明符描述了将要构建的特定分支,例如温布尔登分支。 对于每个体育赛事,都使用一个特定的分支,使团队可以管理特定于锦标赛的配置。 最终,系统被配置为根据内容更改构建特定的文件或子目录。 在此配置中,将在源代码( BigEngine/src/* )或Maven构建说明( BigEngine/pom.xml )中的任何更改时触发构建。

图4. Jenkins工作的BigEngine源代码管理部分
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

BigEngine的构建触发器如图5所示。构建触发器描述Jenkins如何以及何时触发构建作业以为PCC生成部署工件。 图5中为该作业定义了两个构建触发器。SNAPSHOT依赖关系触发器使Jenkins检查项目的项目对象模型(POM),以查看是否有任何项目依赖项在此Jenkins服务器上构建。 Jenkins自动建立依赖关系以构建任何必需的下游组件。 这有助于持续集成,因为依赖性的任何更改都会触发下游构建。 此外,系统配置为每三分钟( H/3 )轮询源代码服务器一次,以发现用于执行构建的任何更改。

图5. Jenkins工作的构建触发器
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

BigEngine的构建环境定义如图6所示。构建环境选项控制着许多影响构建完成方式的方面。 例如,在BigEngine中开始构建之前,将删除构建工作区,以确保每个构建都从干净的开始。 将时间戳添加到每个构建的输出以跟踪和跟踪每个构建。 定义了上游Maven存储库以帮助工件解析。 最后,定义了工件服务器来解决构建期间必需的私有工件。

图6. Jenkins工作的构建环境
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图7包含BigEngine的构建前,构建和构建后步骤。 预构建步骤使用Maven清理所有项目。 构建步骤定义了Maven POM和用于构建的目标。 BigEngine定义了一些自定义构建的选项。 选项-T 8告诉Maven使用八个线程进行构建,这加快了构建过程。 选项-X指示Maven提供调试输出,可用于分析构建故障。 -U选项要求Maven检查远程存储库上快照的更新,以确保构建使用最新的工件。 -Dskip.integration.tests=true选项指示Maven跳过集成测试,因为它们是由另一个作业处理的。 选项clean and install指示Maven清理构建设置并执行构建过程的所有阶段以进行安装。 包括的阶段是验证,编译,测试,打包,验证并安装到本地存储库中。 在最后的构建后步骤中,指示Jenkins复制server.xml以在WebSphere Liberty上进行部署。

图7. Jenkins工作的构建步骤
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图8描述了UrbanCode Deploy的部分配置。 通过此配置,可以将Jenkins中内置的工件发送到UrbanCode Deploy进行部署。 从生产服务器等下拉菜单中选择要部署的目标服务器。 用户名和密码配置为通过UrbanCode Deploy进行身份验证。 生成的工件被映射到UrbanCode Deploy中的组件,例如Forecast Engine。 基本工件目录定义了UrbanCode Deploy的Jenkins插件应在何处查找可上载的工件。 目录偏移量与基本工件目录的偏移量有关,并进一步完善了应上传的文件。 该版本在UrbanCode Deploy中用作组件版本,因此BigEngine版本与Jenkins内部版本号匹配。 Jenkins会在每次构建时自动设置版本。 include指令是由构建过程产生的工件的列表,应针对组件的每个版本将其发送给UrbanCode Deploy。

图8. UrbanCode Deploy发布Jenkins作业的配置
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图9显示了UrbanCode Deploy Jenkins插件配置的其余部分。 对于BigEngine项目,该插件已配置为在构建完成后自动将更改部署到PCC测试环境。 启用部署复选框时,它指示插件请求UrbanCode Deploy执行部署过程。 定义了要部署的应用程序以及UrbanCode Deploy中的流程,以协调部署。 在几分钟之内,源代码管理中的任何更改都会反映在测试环境中。

图9.针对Jenkins作业的UrbanCode Deploy连续部署配置
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

UrbanCode部署

持续集成持续部署持续交付_持续集成和部署

连续部署 (CD)是一种通过一个或多个部署环境(例如测试,登台和生产)自动或自动部署构建工件的实践。 CD系统可将小型变更集传播到生产中,因为它们可以卸载,自动化和协调繁琐的部署过程。 PCC广泛使用UrbanCode Deploy作为CD系统。 推广许多小变更集而不是大变更集有利于协助PCC调试和变更回滚。

UrbanCode Deploy拓扑在顶层具有应用程序。 一个应用程序由一组组件,组件过程和应用程序过程组成。 这些组件是带有相关流程的版本化工件,这些流程描述了如何部署这些工件。 应用程序过程描述了如何协调跨组件的部署。 组件与资源(通常是计算设备)相关联,该资源描述了给定应用程序在何处运行组件进程。 可以在不同的部署环境(例如测试,登台和生产)中执行应用程序流程。

对于PCC,UrbanCode Deploy用于部署项目的所有组件,包括WebSphere Liberty应用程序,Hadoop作业,Streams作业和可视化组件。

图10描述了UrbanCode Deploy PCC中配置的六个部署环境。 标为ECC的环境是测试环境。 试生产环境是按云区域划分的不同的暂存环境。 同样,生产环境也按云区域分开,使开发人员可以一次将更新推送到一个云区域。

图10. PCC的UrbanCode Deploy应用程序视图
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图11显示了在此配置中表示为ECC的测试环境的配置。 可以部署到生产环境的每个组件也可以部署到测试环境。 UrbanCode Deploy支持组件版本控制,以便可以查看特定环境中的每个已部署组件版本。

图11. UrbanCode Deploy中的测试环境
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

生产环境之一及其相应的组件和版本如图12所示。Production Plex 3反映了配置。 PCC开发人员将组件版本推送到单个生产plex(区域)并验证了功能。 经过验证和成功的系统测试后,该部署被推到其他区域。

图12. UCD中的生产环境
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图13显示了几个部署的高级应用程序流程。 每个不同的过程都执行部署或操作,例如服务器重新启动。 PCC用户使用上面相应的图10、11和12中所示的播放按钮选择过程。

图13. UCD中的申请流程
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图14显示了用于部署Predictive Cloud Forecasting服务的高级应用程序过程。首先,部署配置,然后是停止应用程序服务器的所有应用程序服务器更新。 接下来,启动应用程序服务器,然后执行后处理脚本。

图14. UCD中的BigEngine部署过程
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图15显示了用于部署UIMA组件的高级应用程序过程。 并行部署了许多不同的Java虚拟机和分析引擎。 在启动每个分析引擎并将它们结合在一起之后,将部署顶级聚合器引擎。 部署可能很复杂,但是可以通过UrbanCode Deploy进行重复。

图15. UrbanCode Deploy中的UIMA部署
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图16中描绘了在名为“ Install Forecast Engine”的组件过程中更新Liberty组件所执行的步骤。在此过程中,从Chef导入属性,例如WebSphere Liberty Profile(WLP)安装目录和WLP用户。 这些属性将在后续的自动化步骤中使用。 随着WebSphere Liberty Server停止,UrbanCode Deploy下载服务器配置和应用程序代码。 然后在服务器配置中替换诸如端口和安全性功能之类的令牌,以针对部署环境定制WebSphere Liberty Server。 最后,服务器由另一个组件进程启动。

图16. UrbanCode Deploy中的WebSphere Liberty组件部署过程
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

图17描述了执行以更新InfoSphere Streams组件的步骤。 组件过程将停止Streams应用程序,创建必要的应用程序目录(如果以前未创建),将其作为tarball下载并解压缩,下载配置,然后重新启动应用程序。

图17. UrbanCode Deploy中的InfoSphere Streams组件部署过程
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

UrbanCode Deploy提供了一个基于Web的编辑器,以简化针对各种类型的复杂应用程序和组件的可重复和自动部署过程的创建。 UrbanCode在PCC中用于在多个云区域和多个主机环境(例如测试,登台和生产)中部署和管理组件的版本。 UrbanCode的灵活性允许管理多种组件类型的部署,包括Hadoop作业,Streams作业,WebSphere Liberty应用程序,UIMA应用程序,数据库更改和配置文件。

结论

Jenkins for CI和CD的UrbanCode Deployment以及部署自动化的结合提高了PCC的可靠性,并减少了进行更改所需的时间。 图16显示了通过将该项目移至CI / CD环境在2015年澳大利亚网球公开赛中实现的节省。

图18.在2015年澳大利亚网球公开赛期间使用CI / CD节省的时间
持续集成持续部署持续交付_持续集成和部署

查看全尺寸图片

持续集成持续部署持续交付_持续集成和部署

在第6部分中,我们将使用SPSS Modeler和SPSS Statistics检验预测建模。 此外,我们将描述使用非结构化信息管理体系结构横向扩展(UIMA-AS)来发现预测大型Web流量需求激增的特征向量。


翻译自: https://www.ibm.com/developerworks/analytics/library/ba-bluemix-predictive-cloud-computing-continuous-integration-trs/index.html