OpenStack架构企业IT应用的敏捷实践

所以我们从OpenStack的CI/CD框架方法入手,借鉴了CI和CD等方法,来应用到自身的业务系统中。通过CI在开发阶段,对项目进行持续性自动化编译、测试,达到控制代码质量的手段,持续提升开发效率;同时利用CD可以保证在短周期内生产有价值的产品,并且保证能够可靠地在任何时间发布。

当然OpenStack CI/CD框架并不是万灵丹,因为企业应用、Web应用、大数据分析等各类项目,从需求分析到项目管理、代码质量、测试部署、开发环境和生产环境等,差异很大。唯一不变的就是软件工程持续敏捷的思路,真正解决问题的思路!只有踏踏实实去实践敏捷开发的思路,才可能开启产品开发的破冰之旅。

项目团队引入敏捷开发的步骤

■ 组织架构的变革

首先要说服老板来做这个敏捷决定,最合适的办法就是让老板认清风险,提前做好应对风险的预案,并证明敏捷带来的业务价值。

接下来,发挥领导者所起的导向作用,让团队参与其中,以敏捷和Scrum为基础,探索具体的工作模式。

■ 团队人员分工优化

传统的人员需尽快从组织职能上转入敏捷,要明确各种成员的角色,比如一些中层IT主管适合平台经理、交付经理;传统的供应链、采购、人力、法务、财务等职能成员,需要以独立的辅助部门引入;对于一线员工中资深的骨干,可以考虑以架构师、领域专家角色参与。

■ 流程重定义与风险评估

从企业的敏捷实践来看,必然会有一部分成员有利益牺牲,也会存在一部分成员的阻力,所谓的阵痛是必须的。所以配合敏捷开发,需要对业务流程需要进行重新梳理。

立项阶段:与现有的研发需求流程进行连接,将关键的执行者进行确定;

架构阶段:在团队组建完毕后,将项目架构进行合理优化,与业务规划保持一致;

发布计划:团队配置成型后,形成项目与产品的整体规划;

产品开发:在业务和IT构建阶段开始就实现紧密交互,每个迭代可产生交付件;

配置与交付:获取产品配置的反馈;并形成最小化单次部署的环境。

■ 管理优化及团队的协作

在传统的管理方式中,计划与决定由项目经理制定,需求与分析由架构师制定,团队所做的只能做实现。改为敏捷模式后,重心由流程向人转移。计划由团队制定,决定由团队制定。这样发挥团队主动与协同性。

OpenStack CI/CD任务分解及经验

■ OpenStack CI/CD流程设计

OpenStack社区开发和CI/CD进行了紧密的集成,其中核心组件包括:Jenkins配置管理、Github代码管理及Launchpad项目管理等。

程序员10

图10 OpenStack社区Zuul流程

以OpenStack Zuul项目为例,如图10所示,简要的CI/ CD步骤如下:

开发者提交code,通过Git提交后,首先到Gerrit上进行review,目的是通过协作,发现一些明显问题,避免把bug带到测试中;

code发送到Jenkins后触发build任务。同时Zuul作为调度器,基于接收的事件触发测试和报告,作为项目的源代码存储库,这样保证code只有通过测试才能合并;

Zuul开始推送自动化的测试任务。方式是Jenkins自动触发集成测试(Tempest),并反方向地反馈到Gerrit;

等Zuul响应测试成功消息后,Gerrit会自动Merge合并代码,再同步到Gitlab库;

最后Zuul推送Jenkins的部署任务,进行自动化部署。

■ OpenStack CI/CD核心工具

在OpenStack CI/CD框架中,使用到的核心工具包括:

CI核心工具,以Jenkins为中心的自动化测试、集成和发布的平台,实现持续集成。团队开发成员可以经常集成他们的工作,而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误。

CD核心工具,以Gitlab作为项目管理和权限管理的持续交付平台,实现一个自托管的Git项目仓库。同时配合Gerrit,它是一款开源的代码审查软件,适用提交前review。一个团队内的参与者,可以相互审阅各自修改后的代码,决定是否能够提交,退回或者继续修改。

■ 企业IT应用以OpenStack CI/CD开发模式的导入

借鉴OpenStack开发经验,自有业务系统的敏捷开发流程设计:

项目开发准备All in One开发环境,业务系统保证源码安装,开发者链接Git版本库的开发目录;