我们使用术语 “软件交付” 来表示开发人员完成新功能的开发,并部署到生产环境。
在我年轻的时候,软件交付可能需要几个月甚至上年。软件开发的伟大进步之一就是一直在缩短这个时间,现在甚至缩短到了几分钟。这意味着产品功能可以更快地产生价值,这不仅提高了软件研发的投资回报率,也为用户快速提供反馈来适应未来发展。
有许多举措促成了这一变化。
- 敏捷软件开发的思维方式, 已经证明了短周期时间和快速反馈的可能性。
- DevOps运动鼓励软件开发人员、运营人员和其他人一起参与交付,促进协同 - 避免增加延迟的交接和脆弱性。
- 基础设设即代码在云时代提供了快速部署和配置新服务器的能力。
- 将这一切结合在一起就是持续交付的做法:始终保持软件产品处于可发布状态,允许快速发布功能并快速对任何故障做出响应。
软件交付的实践
- 持续集成
- DevOps 文化
- 持续交付
- 持续验证
- 部署流水线
- 测试右移 - 生产环境测试
为了达到更有效和快速的持续交付目标,很多企业和团队已经总结出了很好的经验,形成了一定模式,可以被其他人复用。
- 功能开关
- 源代码分支管理模型
- 蓝绿部署
- 分支抽象
- 交付,展示,反馈
- 合成监控
- 可观测性
- 金丝雀发布
- 频繁发布
- 灰度发布
- Keystone Interface
- 增量迁移
- 可重现的编译
- 灾难故障转移
在云原生时代,也有不少值得去探索的软件交付方式。
- 基础设施即代码
- 配置同步
- 不可变服务器
- 云计算
- Snowflake 集群
- Phoenix 服务器