持续交付与DevOps:挑战、测量与成功之路
1. 实施过程中的挑战
在持续交付(CD)和DevOps的实施旅程中,难免会遇到各种问题,这是不可避免的,无需恐惧或羞愧。
1.1 进化中的失败
在前进的道路上,可能会出现未预见的情况,或者现有流程中隐藏的步骤在检查阶段未被发现,也可能是所选工具集出现问题。面对失败,不应隐藏或回避,也不能消极对待。正确的做法是审查情况、评估选项并继续前进,同时坦诚地沟通问题及解决措施,为他人树立应对变革的榜样。
例如,ACME系统为管理依赖关系实施了部署事务(Deployment Transaction),起初效果不错,但后来开始影响交付速度。问题的根源在于无法确定变更完成的先后顺序,也无法进行集成场景测试。如果资产A的变更依赖于资产B的变更,而资产A先准备好,就只能等待,这阻碍了CD的推进。
下面是最初实施的部署事务流程图:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(Dev Environment):::process --> B(CI Environment):::process
B --> C(Production Environment):::process
C --> D(Like live Environment):::process
E(Build):::process --> A
F(Develop against like live):::process --> A
A -->|Deploy| B
B -->|Deploy| C
C -->|Deploy| D
G(DEPLOYMENT TRANSACTION):::process --> A
G --> B
G --> C
G --> D
通过协作和坦诚的讨论,ACME系统最终找到了解决方案:移动部署事务的边界,允许在资产投入生产前进行全面集成测试,由各工程团队协作确定部署顺序。
修订后的部署事务边界流程图如下:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(Dev Environment):::process --> B(CI Environment):::process
B --> C(Production Environment):::process
C --> D(Like live Environment):::process
E(Build):::process --> A
F(Develop against like live):::process --> A
A -->|Deploy| B
B -->|Deploy| C
C -->|Deploy| D
G(DEPLOYMENT TRANSACTION):::process --> A
G --> B
G --> C
G --> D
1.2 不可重复的流程
技术人员倾向于自动化一切,但自动化过程必须具有可重复性和一致性。如果结果不一致,他人将不愿使用为此付出大量时间开发的自动化工具。
在CD和DevOps中,无论是内部工具还是外部工具,都需要保证每次执行相同操作能得到相同结果。例如,软件工程师使用的集成开发环境(IDE)和数据库管理员使用的SQL管理程序,都应具备稳定性和一致性。
不一致的结果不仅会影响工具和流程的信任度,还会在说服相关人员CD和DevOps无风险时带来困难。而一致、可重复的结果有助于发现问题,例如部署相同资产到同一服务器的时间变长,可能意味着基础设施出现问题或CD工具引入了新的错误。
1.3 招聘难题
随着组织产出增加、效率提升,业务发展可能需要招聘新人员。但找到符合CD和DevOps工作方式、理念和行为的人员并非易事。简单地在招聘要求中添加相关经验并不能达到预期效果,因为CD和DevOps相对较新,具备特定技能和经验的人员较少。
招聘过程中,需要与招聘人员充分沟通,明确招聘需求。同时,可以向CD和DevOps社区发布招聘信息。筛选候选人时,不仅要考察技术经验,还要关注他们对开发和运维之间界限的理解、对协作和信任的重视程度。
可以通过设计特定的面试问题来考察候选人的态度,例如:“作为软件工程师,当你将代码提交到源代码控制后30分钟,代码就在生产环境中被数百万客户使用,你会有什么感受?”不同的回答可以反映出候选人对CD和DevOps的接受程度。
2. 关键测量指标
在CD和DevOps的实施过程中,监控和测量是重要但常被忽视的环节。有效的测量能够帮助我们了解进展情况,为决策提供依据。
2.1 测量有效工程最佳实践
测量有效工程和最佳实践并非易事,但很多软件企业已经在使用工具来捕获和测量以下指标:
| 指标 | 描述 |
| — | — |
| 整体代码质量 | 评估代码的整体优劣 |
| 编码规则和标准的遵循情况 | 检查代码是否符合规范 |
| 代码与注释的比例 | 反映代码的可读性 |
| 代码复杂度 | 衡量代码的难易程度 |
| 代码重复率 | 检测代码中重复的部分 |
| 冗余代码 | 找出无用的代码 |
| 单元测试覆盖率 | 评估测试的全面性 |
| 提交率 | 了解代码提交的频率 |
| 平均故障间隔时间 | 衡量系统的稳定性 |
| 平均解决时间 | 评估问题解决的效率 |
| 缺陷逃逸距离 | 检测缺陷在开发过程中的传播情况 |
| 修复反弹率 | 查看修复后问题再次出现的概率 |
单独测量每个指标可能价值不大,但将它们综合起来,可以详细了解工程状况。持续捕获这些数据还能测量和报告进展,例如观察减少代码重复或冗余对代码质量和复杂度的影响。
然而,在测量软件代码指标时,需要考虑工程师的感受。部分工程师可能会对此产生抵触情绪,认为这是对他们技能和工艺的质疑。因此,应将这些工具宣传为对工程师有益的工具,例如帮助他们证明代码质量、发现复杂或易出错的代码区域、去除冗余代码等。如果有反对意见,可以让他们参与工具的设置和配置。
为了更清晰地说明这些指标的重要性,下面详细分析几个关键指标:
-
整体代码质量
:高质量的代码是系统稳定运行的基础,能够减少故障和维护成本。
-
单元测试覆盖率
:高覆盖率的单元测试可以及时发现代码中的缺陷,提高代码的可靠性。
-
代码复杂度
:降低代码复杂度有助于提高代码的可维护性和可理解性。
通过对这些指标的测量和分析,可以不断优化工程过程,提高CD和DevOps的实施效果。
总之,在CD和DevOps的实施旅程中,我们会遇到各种挑战,但只要积极应对,同时重视关键指标的测量,就能够克服困难,实现成功。
2.2 测量环境稳定性
除了工程指标,测量各种使用和依赖的环境的稳定性也至关重要。稳定的环境是CD和DevOps顺利实施的基础,以下是一些可以用来测量环境稳定性的指标:
| 指标 | 描述 |
| — | — |
| 系统可用性 | 系统在一定时间内可正常使用的比例 |
| 响应时间 | 系统对请求的响应速度 |
| 吞吐量 | 系统在单位时间内处理的请求数量 |
| 资源利用率 | 如CPU、内存、磁盘等资源的使用情况 |
可以通过以下步骤来测量环境稳定性:
1.
确定测量工具
:选择合适的监控工具,如Prometheus、Grafana等,用于收集和展示环境数据。
2.
设置指标阈值
:根据业务需求和系统性能要求,为每个指标设置合理的阈值。
3.
定期收集数据
:按照一定的时间间隔收集环境数据,确保数据的准确性和及时性。
4.
分析数据
:对收集到的数据进行分析,找出潜在的问题和趋势。
5.
采取措施
:根据分析结果,采取相应的措施来优化环境,如调整资源配置、优化代码等。
下面是一个简单的mermaid流程图,展示了测量环境稳定性的流程:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(确定测量工具):::process --> B(设置指标阈值):::process
B --> C(定期收集数据):::process
C --> D(分析数据):::process
D --> E{是否有问题?}:::process
E -- 是 --> F(采取措施):::process
E -- 否 --> C
F --> C
2.3 测量CD和DevOps的影响
测量CD和DevOps的实施对业务的影响,可以帮助我们评估其价值和效果。以下是一些可以用来测量影响的指标:
| 指标 | 描述 |
| — | — |
| 部署频率 | 单位时间内的部署次数 |
| 变更前置时间 | 从代码提交到部署到生产环境的时间 |
| 恢复时间目标(RTO) | 系统故障后恢复正常运行的时间 |
| 变更失败率 | 部署失败的变更占总变更的比例 |
通过测量这些指标,可以了解CD和DevOps的实施是否提高了部署效率、缩短了变更前置时间、降低了变更失败率等。例如,如果部署频率增加、变更前置时间缩短、变更失败率降低,说明CD和DevOps的实施取得了良好的效果。
可以按照以下步骤来测量CD和DevOps的影响:
1.
定义指标
:明确要测量的指标,并确定其计算方法。
2.
收集数据
:从相关的系统和工具中收集指标数据。
3.
分析数据
:对收集到的数据进行分析,评估CD和DevOps的实施效果。
4.
制定改进措施
:根据分析结果,制定相应的改进措施,进一步优化CD和DevOps的实施。
3. 总结
在实施和采用CD和DevOps的过程中,我们会遇到各种各样的挑战,如进化中的失败、不可重复的流程、招聘难题等。同时,监控和测量也是非常重要的环节,通过测量工程指标、环境稳定性和CD和DevOps的影响,我们可以更好地了解实施进展,发现潜在问题,并及时采取措施进行优化。
面对挑战,我们不能退缩,要以积极的态度去应对。在测量方面,要选择合适的指标和工具,确保数据的准确性和可靠性。同时,要注重与团队成员的沟通和协作,让他们理解测量的目的和意义,避免产生抵触情绪。
总之,只要我们从一开始就认识到这些挑战是可以克服的,并且重视关键指标的测量,就能够在CD和DevOps的实施旅程中不断前进,最终实现业务的成功。在选择人员时,要尽可能挑选潜在的创新者和追随者,避免引入过多的落后者。通过持续的努力和改进,我们一定能够充分发挥CD和DevOps的优势,为企业带来更大的价值。
超级会员免费看
13

被折叠的 条评论
为什么被折叠?



