张佑文-大型项目CI的服务化解决方案
如果无法正常显示,请先停止浏览器的去广告插件。
1. 大型项目CI的服务化解决方案
张佑文
2019年12月
2. 提 纲
CI与痛点
解决方案
实践成效
3. Why持续集成
内部公开▲
爆炸式集成
• Bug 总是在最后才发现
• 越到后期问题越难解决
• 软件交付时机无法保障
• 程序经常需要变更
• 无效的等待变多
• 用户的满足度低
© ZTE All rights reserved
3
持续集成
• 降低风险及早发现问题
• 更快地定位和修复问题
• 更快地交付成果
• 减少手工的错误
• 减少了等待时间
• 更高的产品质量
4. how持续集成
内部公开▲
1. 维护统一的源码存储库
2. 自动化构建
3. 构建包含自动化测试验证
4. 每人每天提交代码到主干分支
5. 每次提交都应在主干分支上构建集成
6. 立即修复失败的构建
7. 让构建更快速
8. 在类生产环境中测试
9. 任何人都能轻松获得最新可用版本
10.每个人都可以看到主干分支构建状态
11.自动部署多种环境
© ZTE All rights reserved
4
5. 大规模项目特点
内部公开▲
l 产品不确定性多
• 输入不确定:标准协议未定稿,客户认知不一
• 基础不稳定:全新平台、系统架构、全新通讯协议
• 外部约束多:兼容多种组网、多个规格型号、多个历史版本、安全合规
l 系统复杂程度高
• 软件规模大:代码千万~亿行,版本包2G~60G
• 交付要求高:1个月发布一个版本
l 团队规模大
• 并行开发:1000~3000人开发交付
• 跨地域协同:深圳、上海、西安、南京多地协同
• 能力参差不齐:新员工多,人员流动性大
© ZTE All rights reserved
5
6. 大规模项目集成规模与成功率
内部公开▲
© ZTE All rights reserved
6
7. 大规模项目CI的挑战与痛点
l 源码/工具/依赖库分散在不同位置
• 版本分支管理复杂
• 依赖关系复杂,难以并发构建
l 构建集成时长过长
• 无法每次入库在主干分支构建集成
l 构建失败定位困难
• 批量合入,人工定位回滚
l 主干锁库频繁,阻塞代码提交
• 等待入库,等待测试,开发效率降低
内部公开▲
1. 维护统一的源码存储库
2. 自动化构建
3. 构建包含自动化测试验证
4. 每人每天提交代码到主干分支
5. 每次提交都应在主干分支上构建集成
6. 立即修复失败的构建
7. 让构建更快速
8. 在类生产环境中测试
9. 任何人都能轻松获得最新可用版本
10.每个人都可以看到主干分支构建状态
11.自动部署多种环境
© ZTE All rights reserved
7
8. 我们的CI演变历程
内部公开▲
DevOps疾行,改进无止境
CI
方案
2018~2019
2016~2017
2013~2015
2010~2012
研发
模式
• 敏捷萌芽
• 自研工具
• 内部试点项目探索
• 项目级敏捷
• 云CI云测试引入
• 某标杆项目版本交付周期3个月
• 研发入云
• 重点项目版本交付周期6个月
• 质量提升50%
© ZTE All rights reserved
8
• 安全合规内嵌
• CI服务化
• 某重点项目版本交付周期1个月
9. 提 纲
CI与痛点
解决方案
实践成效
10. 内部公开▲
云化CI方案存在的痛点
持续集成
A项目
• 流程建模
• 流水线创建
• 平台工具二次开发
• 相关系统数据打通
• 环境资源调度管理
• DIY持续维护
持续部署
B项目 C项目
… …
代码托管 代码检查 持续集成
自动化测试
Gerrit Fortify 云CI 云测试
Klocwork Jenkins Blackduck
Coverity Docker …… Mesos
…
痛点
l 项目上线:CI需要DIY,低水平重复
l 安全合规:工具分散,游离在主流程外
l 数据一致性:项目间数据定义差异明显,
互通困难
l 成果共享复制:优秀成果复制推广困难
打包发布
Artifactory
Nessus
绿盟
WebInspect
© ZTE All rights reserved
10
11. 内部公开▲
服务化CI的演进思路
持续集成
A项目
• Config A
持续部署
B项目
• Config B
C项目
• Config C
......
数据
中台
可编排持续集成服务
代码托管 代码检查 持续集成
自动化测试
Gerrit Fortify 云CI 云测试
Klocwork Jenkins Blackduck
Coverity Docker …… Mesos
透视图
打包发布
Artifactory
目标
l 场景化支撑:可编排支撑多种项目场景,
轻量化使用运维
l 服务内嵌:安全合规内嵌、质量内建
l 数据治理:统一业务模型、数据模型,
全局展示
l 开源共创:聚焦主航道,工具可插拔和
持续演进
Nessus
绿盟
WebInspect
© ZTE All rights reserved
11
12. 内部公开▲
服务化CI业务框架:场景化、可编排、可扩展
A项目
B项目
C项目
.......
多样化场景
CI应用
产品CI
领域CI
个人CI
分支自动化
安全合规流水线
.......
多级CI/多分支/多项目协同流水
微服务/小产品的多分支管理
多代码库一键拉分支
实例创建
检出
编排调度
构建
缺陷扫描 开源扫描 漏洞扫描 病毒扫描 渗透测试
编排解析器
调度引擎
实例构建器
开源共创
API
公共库
代码操作
编译构建
制品操作
灵活编排
安全扫描
数据推送
.......
数据贯通
工具接口
Gerrit
工具平台
Fortify 云CI 云测试 Artifactory 云部署
Klocwork Jenkins Blackduck 自研SWR Jenkins
Coverity Docker
…… Mesos
低成本
Nessus
绿盟
WebInspect
12
© ZTE All rights reserved
• 多层次串行、并行编排
• 资源优先级可调配
• 控制点、红线自动管控
• 插件式扩展
• 能力集可扩展,快速复制优秀实践
• 统一的数据模型
• 自动化上报数据中台
• 对通透视图
• 原生工具封装,简化引用
• 工具部署升级可统一实施
13. CI服务化方案:基于项目业务提炼通用模型,基于配置灵活调度执行
CI模型
公共配置
项目配置
Step模型
......
......
个人CI
解析构建器
调度执行引擎
VerifyCI
项目定制
公共资源
项目资源
© ZTE All rights reserved
13
MergeCI
......
......
......
产品CI
领域CI
Pipeline模型
Stage模型
内部公开▲
......
......
14. CI模型提炼
项目
CI
流水
Stage
项目
服务接入
配置
CI
CI配置
个人CI流
水
领域CI流
水
产品CI流
水
14
解决方案
CI流水
© ZTE All rights reserved
Step
15. 内部公开▲
CI模型提炼
项目
CI
流水
Stage
流水
名称
注释
Stage
名称
Step
串行Step
并行Step
15
© ZTE All rights reserved
Step
16. CI模型提炼
项目
CI
流水
Stage
Step
ID
配置
环境
节点
输入
对象
依赖
对象
命令
工作目
录
输出
对象
镜像
OS
容器参
数
环境变
量
© ZTE All rights reserved
16
Step
17. 提 纲
CI与痛点
解决方案
实践成效
18. 配置运维轻量化
内部公开▲
1. 项目调试上线:新手2周,熟手1周
2. 灵活配置扩展:yaml配置实现新引入工具调用
© ZTE All rights reserved
18
19. Job灵活创建
内部公开▲
1. Job灵活创建:支持单Job单分支,单Job多分支;单流水单Job,单流水多Job
2. Job间的触发:支持大项目项目群Job之间嵌套自动化调度
© ZTE All rights reserved
19
20. 资源调度提效
内部公开▲
1. 多层次节点并发:支持stage内多模块并发/多step并发/step内操作并发,满足各种场景的CI
快速反馈需求
2. 资源优先级可调配:支持按照分支/组件/节点方式进行资源的自动化匹配,保障高优先级分支
的Job资源要求
© ZTE All rights reserved
20
21. 分支自动化管理
内部公开▲
1. 一键拉分支:支持多代码库一键拉分支;可以通过分支配置信息创建/代码库的快照信息创建
2. 支持复杂多分支:支持项目微服务/小产品独立发布的分支自动化管理
© ZTE All rights reserved
21
22. 自动化上报透视数据
内部公开▲
1. 内置数据上报:自动化通过Rest或Jenkins插件上报CI数据
2. 增强CI数据模型:支持CI数据建模全量表的数据模型,可扩展补充step内细节数据
© ZTE All rights reserved
22
23. 变量与模板增强编排配置
内部公开▲
1. 简化配置,减少配置信息的重复冗余和维护工作量
2. 增强能力,数据可灵活在流水线中传递
© ZTE All rights reserved
23
24. 某重点项目使用CI服务化方案收益
时长优化
齐套文档
•
模块化组装
新业务适配
•
打包命令模板封装
• NF包组件灵活配置
• 积木化组装
•
由40-45分钟缩减
配置字段有详细的
文档说明
• 关键代码有注释说明
• 方便快速上手
© ZTE All rights reserved
24
为18-20分钟
安全合规
•
流水线代码不会被
其他用户使用回放看到
25. 内部公开▲
基于服务化方案快速实现安全合规内嵌
• 基于服务化CI框架,可一次性快速上线四大类、七
种安全工具,免去整合安全工具的人力与时间投入
• 统一输出报告内容,自动上传制品库并打标签,
100%确保报告真实准确,达到公司治理要求,并
释放汇总工作的人力每版本0.5人天
• 简化配置和部署,典型的项目配置仅100多行
• 统一安全数据模型,自动化采集结果并传到数据中
台,形成反馈闭环
• 直接对接透视图,可视化安全扫描数据
© ZTE All rights reserved
25
26. 后续改进优化
更高的性能:15分钟
底层框架优化:配置加载、工具性能提升、资源利用率分析
业务并发优化:业务依赖解耦、版本打包调优
更易用的配置:新手1周上手
配置项多:优化和简化,降低学习使用门槛
规则复杂:结合场景,进行标准化和模版化
更快的响应:需求<1周,故障<1天
功能定制:快速简易的自定义功能开发
问题定位:日志易于分析和定位失败
© ZTE All rights reserved
26
27. 谢谢!