从敏捷到DevOps:从潜在可交付到始终可发布,聚焦技术价值流和技术实践

从敏捷到DevOps:从潜在可交付到始终可发布

DevOps的原则和实践与敏捷方法一致,许多人认为DevOps是自2001年开始的敏捷之旅的合理延续。敏捷通常是DevOps效率的保障,因为它专注于让小团队向客户持续交付高品质的代码。


如果我们每次迭代的目标不限于“潜在可交付的代码”,而是扩展到让代码始终处于可发布状态,让开发人员每天都把代码提交到主干,并在类生产环境中做功能演示,那么许多DevOps相关的实践就会浮现。

聚焦技术价值流和以下技术实践

持续集成

每日提交代码,也迫使开发人员进一步分解工作,同时保持主干处于可发布状态。


版本控制系统为团队间的沟通提供了一套完整的机制——每个人对系统都有了更好的理解,并且都了解部署流水线的状态,而且能在出现问题时互相帮助,从而实现更高的质量和更快的部署速度。


应用这些实践后,我们再来修订“完成”的定义:“在每个迭代周期结束时,已经在类生产环境中集成和测试了可工作和可交付的代码;这些代码通过一键式流程在主干上创建,并已通过自动化测试。”


遵循上述定义的原则有助于进一步提高代码的可测试性和可部署性。通过将代码保持在可部署状态,就能避免在项目后期才进行单独的测试和bug修复。

持续交付

持续交付是指,所有开发人员都在主干上进行小批量工作,或者在短时间存在的特性分支上工作,并且定期向主干合并,同时始终让主干保持可发布状态,并能做到在正常的工作时段里按需进行一键式发布。开发人员在引入任何回归错误时(包括缺陷、性能问题、安全问题、可用性问题等),都能快速得到反馈。一旦发现这类问题,就立即加以解决,从而保持主干始终处于可部署状态。

持续部署

持续部署是指,在持续交付的基础上,由开发人员或运维人员自助式地定期向生产环境部署优质的构建版本,这通常意味着每天每人至少做一次生产环境部署,甚至每当开发人员提交代码变更时,就触发一次自动化部署。

持续设计

在技术价值流中,我们通过为运维而设计来为下游工作中心做优化,包括运维的非功能性需求(如架构、性能、稳定性、可测试性、可配置性和安全性)与用户功能同样重要。


这样,我们就在源头保障了质量,并形成了一套非功能性需求,可以主动地将它们集成到构建的所有服务中。

持续监控

我们希望尽可能多地向所有技术利益干系人展示基础架构的监控信息,而且在理想的情况下是按照服务或应用程序的逻辑来组织的。换句话说,当环境出现问题时,我们需要准确地知道应用程序和服务可能会或正在受到什么影响。

持续测试

每当有新的变更检入版本控制系统时,就需要在构建和测试环境中运行快速的自动化测试。通过这种方式,可以立刻发现和解决所有集成问题。这样就能维持较小的代码集成量,并保证代码始终处于可部署状态。


通常,自动化测试从快到慢分为如下几类。
❏ 单元测试:通常独立测试每个方法、类或函数。它的目的是确保代码按照开发人员的设计运行。由于诸多原因(如需要进行快速和无状态的测试),通常会使用打桩(stub out)的方式,隔离数据库和其他外部依赖(例如,把函数修改为返回静态的预定义值,而不是调用数据库)。[插图]
❏ 验收测试:通常整体测试应用,确保各个功能模块按照设计正常工作(例如符合用户故事的业务验收标准,API能正确调用),而且没有引入回归错误(即没有破坏以前正常的功能)。
❏ 集成测试:保证应用能与生产环境中的其他应用和服务正确地交互,而不再调用打桩的接口。在这种情况下,冒烟测试通常是指针对整个应用进行的一组成熟的验收测试。


需要度量测试覆盖率(取决于类数、代码行数、排列组合等),还要把度量结果可视化,甚至可以在测试覆盖率低于一定水平时(例如当类的单元测试率不足80%时)使测试套件的验证结果显示失败。


Martin Fowler曾说:“[通常,]10分钟的构建[和测试过程]是完全合理的……[我们首先]进行编译,然后在数据库完全打桩的情况下,在本地执行单元测试。这样的测试非常快,原则上可以在10分钟以内完成。但是,这种测试不会发现大规模交互的bug,特别是涉及与真实的数据库交互的bug。在第二阶段要运行的验收测试则不同,它会访问真实的数据库,并涉及很多端到端的交互行为。这套测试可能需要运行几个小时。”

持续配置

当使用基础设施即代码的配置管理工具时(例如Puppet、Chef、Ansible、SaltStack或Bosh),可以用测试代码时所用的框架测试环境是否正确配置及正常运行(例如将环境测试编写成Cucumber或者Gherkin测试)。


与在部署流水线中针对应用进行代码分析一样(如静态代码分析和测试覆盖率分析),还要用工具(例如Chef的Foodcritic或Puppet的puppet-lint)对构建环境的代码进行分析。还应该把所有安全性加固检查作为自动化测试的一部分,以保证所有相关配置都是正确的(例如服务器规格)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值