13、持续交付与DevOps:挑战、测量与成功之路

持续交付与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的优势,为企业带来更大的价值。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值