建设基于 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 上定义各类测试、发布等工作
|