基于 OpenStack 建设开发测试云

[复制链接]
查看11 | 回复5 | 2015-9-22 15:53:22 | 显示全部楼层 |阅读模式
胡 国清, 软件工程师, IBM吴 春峰, 高级软件工程师, IBM
本文以 ICM(IBM Cloud Management)项目为例,展现了基于 OpenStack 建设开发测试云的最佳实践,利用开发/测试云平台可以支持快速地进行产品的开发、测试和发布,使得整个工作流高效稳定地运转,保障产品新版本的快速发布。该项目利用开发测试云平台的实践在软件开发领域非常具有代表性,在很大程度上能够被其它软件开发项目借鉴以及扩展应用于其它非 Openstack 云平台。

回复

使用道具 举报

千问 | 2015-9-22 15:53:22 | 显示全部楼层
什么是开发测试云?本文中的开发测试云指的是软件开发、测试和发布工作在云环境上进行,那么针对该软件项目提供特定的环境支持的云平台则可称之为开发测试云,本文中的开发测试云侧重于展示如何利用自动化的镜像管理在云环境中快速提供开发测试环境。

回复

使用道具 举报

千问 | 2015-9-22 15:53:22 | 显示全部楼层
建设基于 Openstack 的开发测试云
建设 OpenStack 云平台本文中 OpenStack 云平台采用 ICM(IBM Cloud Management,曾名 CMWO,是 IBM 基于 OpenStack 的一个云计算软件产品)建设,每个用户拥有唯一帐号,以便管理个人的开发测试环境。图 1. ICM 登录界面

集成 Jenkins 与 OpenStackJenkins 是一个开源的可扩展的持续集成工具,通过 OpenStack 创建的实例可以在 Jenkins 上注册为节点,用于负载 Jenkins 上定义的各种工作。利用 Nodepool 可以很好的将实例应用为 Jenkins 节点。
Nodepool 是 OpenStack CI 的一个项目,它可以自动地基于不同的镜像部署和管理实例池,并维持 Jenkins 上相应的节点池。图 2描述了 Openstack、Jenkins、Nodepool 相互作用和影响的关系。图 2. Openstack、Jenkins、Nodepool 关系图

基于 Build 自动更新镜像用户快速获取所需的开发测试环境是通过部署 OpenStack 中的镜像实现的。为确保在第一时间满足用户的的需求,必须保障镜像随着 Build 的更新而及时更新,通过在 Jenkins 上建设相应的 Job 和 Pipeline 可以实现,当有新的 Build 发布时将自动触发工作流创建新的镜像,所产生的新镜像中已完成指定 Build 的安装配置。如图 3所示。图 3. 自动更新镜像的 Pipeline

从上图可以看出使用 json 格式定义镜像的需求,Jenkins 解析所有镜像的需求(清单 1)并触发 Pipeline 以保障满足所需镜像(清单 2)。清单 1. 用 Json 定义镜像需求
IMAGES='[
{"NAME": "x86_RHEL71_2NIC_ICM'${Latest_ICM}'_allinone_db2", "ARCH":"x86",
"OS":"RHEL71", "NIC": 2, "ICM":"'${Latest_ICM}'", "TOPO":"allinone", "DB":"db2"},
{"NAME": "x86_RHEL70_2NIC_ICM'${Latest_ICM}'_allinone-sce_db2", "ARCH":"x86",
"OS":"RHEL70", "NIC": 2, "ICM":"'${Latest_ICM}'", "TOPO":"allinone-sce", "DB":"db2"},
...
{"NAME": "x86_RHEL65_2NIC_ICMD20141118-0330_allinone_mysql_420GM", "ARCH":"x86",
"OS":"RHEL65", "NIC": 2, "ICM":"D20141118-0330", "TOPO":"allinone", "DB":"mysql", "SUF":"420GM"}
]'复制代码
清单 2. 解析镜像需求
#List the images required.
images_need=()
imagesNum=`python $JSONER --text "$IMAGES" --path -c`
for((i=0;i复制代码
在 Jenkins 上同样创建相应的 Job 和 Pipeline 用于运行各类测试与发布工作(图 4)。根据不同的条件将触发不同的测试内容,测试针对不同 Build 版本及环境同样可利用上面产生的镜像进行。图 4. Jenkins 上定义各类测试、发布等工作




回复

使用道具 举报

千问 | 2015-9-22 15:53:22 | 显示全部楼层
开发测试云的自服务
从云环境中订制开发测试环境开发测试云本身的运维管理工作在 OpenStack 中的一个专用 Project 中进行,比如上述更新镜像的工作,当镜像准备完毕后将分享至另一个 Project,也就是普通用户(开发测试人员)所在的 Project。因此,当用户使用自己帐号登录后,可以看到公共镜像(图 5)并可部署这些镜像(图 6)。基于某些部署的优化,用户从开始部署到登录到系统环境中仅需一分钟。图 5. 浏览公共镜像

图 6. 部署公共镜像

基于特定的环境进行开发与测试对于不同配置及版本的镜像,在镜像属性及系统内均有详细的记录(示例见清单 3 及图 7)。因此,自动化测试和用户可准确地识别并利用相应的镜像,从而确保开发、测试在正确的环境中进行。清单 3. 镜像的属性配置
attrs=`python $JSONER --json "${IMAGE}"
--path -attrs` Properties="" for attr in $attrs; do [ "$attr" !=
"NAME" ] && Properties="${Properties} --property
${attr}=`python $JSONER --json "${IMAGE}" --path ${attr}`" done [
$NIC -gt 1 ] && Properties="${Properties} --property
multinic=True" [ $NIC -gt 1 ] || Properties="${Properties}
--property multinic=False" glance image-update --is-public True
${Properties} ${NAME}复制代码
图 7. UI 上显示镜像属性(部分)

开发测试反馈于镜像更新一方面,当测试工作在当前最新版本的测试环境中完成后,将产生该版本的测试报告进行反馈。另一方面,开发人员将在当前最新版本的开发环境中解决所测试出来的产品问题,同时也将继续进行新的开发工作,根据提交内容的变动将触发新版本 Build 的发布。最后,新产品 Build 将自动集成于镜像更新中。
开发测试云上的持续开发与发布正如上文所述,持续开发与发布需由各个自动化环节与人工开发结合,形成良性循环,推动产品向前发展。主要包括代码提交自动更新 Build、新 Build 自动触发测试、基于新 Build 解决问题并继续开发,开发测试云环境可以承载这些环节以高效运转。

回复

使用道具 举报

千问 | 2015-9-22 15:53:22 | 显示全部楼层
参考资料访问 OpenStack 官网,以了解更多关于 OpenStack 的信息。访问 GitHub 上的 OpenStack 项目,以学习 OpenStack 的开发。访问 Jenkins 官网,以了解更多关于 Jenkins 的信息。developerWorks 中国:Bluemix 资源中心。developerWorks 云计算站点 提供了有关云计算的更新资源,包括
云计算 简介。更新的 技术文章和教程,以及网络广播,让您的开发变得轻松,专家研讨会和录制会议 帮助您成为高效的云开发人员。连接转为云计算设计的 IBM 产品下载和信息。关于 社区最新话题 的活动聚合。


回复

使用道具 举报

千问 | 2015-9-22 15:53:22 | 显示全部楼层
原文地址:http://www.ibm.com/developerwork ... st-cloud/index.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行