由于收集材料时没有具体记录文件来源,参考文献栏暂时为空。若有人知道来源,请在评论区与我联系,我会将来源备注于此,谢谢。而且若要转载,请务必注明转载地址。在公司实习的时候图片一直上传失败,实习结束后,图片就找不到了,所以图片可能就无法上传了。
一、 开发背景
为了提升软件产品的研发效率,越来越多的团队选择使用敏捷开发模式,借助各类研发工具链工具,实现合理高效的管理整个研发流程。然而随着项目的规模不断扩大,在研发流程的各个阶段都有可能出现风险阻碍研发进度,为了保障项目进度的顺利推进,一个全面展示研发流程信息的平台迫在眉睫。
二、 预研目标
本次预研的目标是全面研究Hygieia软件。
三、 Hygieia
(一) 软件简介
Hygieia 是 CapitalOne 公司内部孵化的一个项目,目的是解决 DevOps 工具链中的数据碎片化的问题,Hygieia 为不同的工具提供了收集数据的 Collector,将数据存储在 MongoDB 里,然后进行数据可视化的展示。可视化地提供交付流水线全过程的有效反馈。Hygieia有两种完备的仪表盘来可视化CI/CD流水线信息,这两种仪表盘分别为工程师和执行者设计。官网地址:http://capitalone.github.io/Hygieia/getting_started.html
(二) 功能介绍
- 支持的接口平台
- Build Collectors(构建管理)
a) Bamboo
b) Jenkins
c) Jenkins-codequality
d) Jenkins Cucumber
e) Sonar - Cloud Collectors(云管理)
f) AWS - Deploy Collectors(部署管理)
g) uDeploy
h) XLDeploy - Feature Collectors(项目需求管理展示)
i) Jira
j) VersionOne
k) Gitlab
l) Rally - Miscellaneous Collectors
m) Chat Ops
n) Score - SCM Collectors(配置管理)
o) Bitbucket
p) GitHub
q) Gitlab
r) Subversion
s) GitHub GraphQL - Performance Collector(性能管理)
t) AppDynamics - Configuration Management Database (CMDB)
u) HP Service Manager (HPSM) - Library Policy
v) Nexus IQ - Artifact Repository
w) Artifactory
- 功能
- 工程师仪表盘
分为团队仪表盘和产品仪表盘。
选择仪表盘类型界面如图 1所示。
图 1
A. 团队仪表盘
组件视图
展现产品细节信息,包括当前Sprint中的Feature、代码提交情况、持续集成活动,代码分析、安全分析、单元测试、功能测试结果、部署和环境状态等。可以管理配置CI/CD流水线中的多种DevOps工具。可以选择显示哪些部件的信息,如图 2。可打分来促进组织内良性竞争,如图 3。
图 2
图 3
流水线视图
如图 4,展现每个组件从开发到测试,再到部署的整个生命周期过程,如提交编号和提交日期,还可以设置具体有哪些环节和环节名称。
图 4
云视图:展现应用实例、资源占用率等信息。
云 – 总览视图:
将所给云账号的信息可视化。功能如图 5所示。
图 5
云-细节视图:
显示所给账号的如图 6所示信息。
图 6
B. 产品仪表盘
展现每个配置的产品的从开发到部署的整个生命周期过程。如图 7。
图 7
提交级:
• 绿盒子代表了不超过两个标准偏差(standard deviations)的提交
• 红盒子代表超过了两个标准偏差的提交次数
•
• 图 8
构建级:
图 9
每一级的具体提交信息:
图 10
部署级:
图 11
产品级:
图 12
流水线健康度详细信息:
图 13
- 执行者仪表盘
A. Selecting a Portfolio界面:可看自己和下属执行部门的人的资料:姓名,职位,部门。如图 14。
图 14
B. Portfolio界面:显示文件主人的所有测试结果以及文件主人的所有产品的事件。如图 15。
图 15
界面详细讲解如下。
图 16
组件信息 描述
指标(Metric)名 当前文件的状态
指标值 根据portfolio里所有信息
What’s this? 点击这里去看指标的简短定义
指标分解 在portfolio层次组成指标真的不同的成分
详情 点击此按钮去看Portfolio指标界面,
产品 点击此按钮去看Products界面
时间戳下的趋势暗示 90天内的指标变化趋势
表 1
向上红箭头 – 在过去90天里开源违规或产品问题恶性增长
向上绿箭头 – 通过最新执行的自动化测试百分比良性增长
向下红箭头 – 相关产品组件的产品发布数量恶性下降
向下绿箭头 – 代码问题良性下降
无状态 – 没有足够数据
指标详细内容如下
内容 定义
Blocker 重要程度被标记为blocker的发生时间的组件数量
Components Reporting 数据成功收集的组件百分比
Technical Debt 用来解决现有问题的时间。如果按天显示则默认一天花费8小时
Open Incidents 开放状态下产品问题的总数
Mean Time to Resolve 问题发现到解决所经过的时间
表 2
C. 产品界面
a) 事件发生次数的总数显示
b) 不同组件的分值还有当前状态的解释
c) Portfolio里的所有产品列表还有指标的趋势预测
d) 点击Details可以跳到组件详情界面
e) 点击Change Metric来看其他指标的详情
图 17
另一种产品界面,可以通过调节配置显示。
图 18
D. 产品详情界面
一个执行者所管理的全部应用都被显示在这个界面。
a) Portfolio下的所有产品列表
b) 每一个产品的各种指标值和相应趋势
c) 用于计算指标的组件数据百分比
d) 点击Details可查看Components界面
e) 点击Change Portfolio查看其它执行者的Portfolio
图 19
E. 组件详情界面
显示了一个产品的组件信息。
f) 事件发生次数的图形化显示
g) 产品中所有组件的重要级,重要级主要有block, critical, major
h) 产品的所有组件列表
图 20
(三) 工程架构
- 架构图
- 工程师仪表盘
架构如下图 1所示,具体每层功能如表 1所示
图 21
层次名称 描述
UI层 作为Dashboard供研发人员根据需求进行配置,最终实现devops的流程展现。
API层 包含Hygieia API和审计API。Hygieia API包含所有典型的Rest API服务。作为整个系统的桥梁,接收 Collector采集回来的数据,存入Mongodb中,同时接收UI的请求,从数据库中获取数据返回到UI展示。审计API是服务于审计CI/CD数据的API终端集合。
DevOps工具 Jira, Git, Sonar等工具。
收集者层 通过RESTAPI的方式与众多的工具链进行联系;Collector均采用了java进行开发,通过简单的设定即可启动,当然前提是收集对象也应该是启动的状态。
数据库层 作为底层的存储层,存放Collector采集的数据。
表 3
2) 执行者仪表盘
架构如下图 2所示,具体每层功能如表 2所示
图 22
组件 描述
数据库层 读写数据库
收集者层 包含文件和指标收集器,每一个收集者都从读数据库获取数据,生成指标,并将这些指标写入写数据库。
API层 提供了在UI上显示指标的接口。
UI层 用户从该层看到仪表盘。不能配置仪表盘信息。
表 4
2. 编码方式
使用的语言有java、JavaScript与html,开源,源代码网址:https://github.com/capitalone/Hygieia
(四) 环境配置
前提是已经有,java 、maven、node、mongoDB的环境了,这些环境的搭建不在本篇范围内
- 启动api模块
- 项目下载下来后,先mvn install root模块,有些查询对象使用了maven插件编译生成的,所以必须先编译
- 在Hygieia\api\src\main\resources\application.properties中配置你的mongDB连接信息,基本不用动了,server.port先别改,默认使用8080
- 运行Hygieia\api\src\main\java\com\capitalone\dashboard\Application.java中的main方法启动服务
- 启动UI模块
进入Hygieia\UI目录下,
- 执行 npm install ,bower install ,这个过程会比较长
- 待所有依赖都下载完成后,执行gulp serve启动UI模块,默认端口:3000
- UI模块不配置访问api接口地址,默认范围本地8080端口,所以刚刚的api模块不建议改端口,当然也可以在gulpfile.js的config中配置
以上步骤没有问题的话,浏览器会跳出http://localhost:3000/#/,界面如图 1,代表已经成功了
图 23
- 启动插件模块
以scm插件gitlib为例,Hygieia支持的插件很多
- 至Hygieia\collectors\scm\gitlab\src\main\resources 目录下新增文件application.properties,配置内容如下
gitlab.host=git.yudianbank.com gitlab.port=80 gitlab.cron=0/10 * * * * ? #多久同步一次gitlib数据
gitlab.protocol=http gitlab.apiVersion=3 gitlab.firstRunHistoryDays=200
注意gitlab.apiVersion版本的差异,gitlib api的接口会不一样 - 运行Hygieia\collectors\scm\gitlab\src\main\java\com\capitalone\dashboard\Application.java中的mian方法启动服务
- 测试gitlib插件
按如下图 2图 3图 4图 5操作,最后可看到软件提交的生命周期
图 24
图 25
图 26
图 27
(五) 开发所需人力与资源
(以下人日按照每天工作8小时估算)
- 编写软件使用说明文档:5人日
(六) 优势与不足 - 优势
- Hygieia整合了devops过程中各个环节的研发工具链,将其中最有价值的信息整合到一个Dashboard中,对于提升效率有很大的帮助。
- 良好的设计,整个产品的架构选用了基于插件的架构,同时Hygieia本身也提供了RESTAPI,可通过远程调用这些API将数据发布至Hygieia中,对于后续扩展开发提供了便利。
- 开源软件。
- 不需要专门维护。
- 功能齐全,界面简洁大气。
- 对数据的分析更透彻,图表清晰。
- 不足
- 只能显示数据分析数据,不能真正深入到各个jenkins等接口软件中去执行动作。
- 若希望在Dashboard上看到每次集成后对于软件产品功能、性能等多方面的影响,目前Hygieia还暂时无法满足。
- 缺少清晰易用的说明介绍和上手资料,对于团队的使用有较大困难。
- 英文显示,对英语要求高。