DevOps基础的认识与工具实践
什么是DevOps
- DevOps 强调的是高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件
- Devops 包含了敏捷开发,测试,运维
- DevOps 是组织架构变革,更是团队文化和思想观念的变革
DevOps 的价值
- 填补开发,测试,运维之间的信息鸿沟,改善团队组织文化,提高参与感
- DevOps 是把人员、流程、产品进行结合,给用户提供持续价值的一个过程,既涉及到人员、流程、工具,也涉及到产品
- DevOps 最终目的是给客户提供持续交付的价值,流程包括:产品的规划跟踪、软件开发、构建测试、产品部署、运维、监控和优化。
- 简化重复性工作,减少不必要的等待,有工具进行发布部署,减少误操作的可能性
DevOps的目标
DevOps 必须以支持业务敏捷目标
- 精准,实时的响应客户需求
- 更好的体验和更高的效率
- 交付内容上关注完整的业务链条,交付过程上关注从业务,开发,运维在内的全链路流程实现端到端的快速响应,交付,稳定的运行
什么是持续集成
频繁的将代码集成到主干,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成
什么是持续交付
频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段,它强调的是不管怎么更新,软件随时随地都是可以交互的
什么是持续部署
指的是代码通过评审以后,自动部署到生产环境,代码在任何时刻都是可部署的,可以进入生产阶段
Devops 工具实践
明确目标:指导最终实践的成果,DevOps 是一个比较宽泛的概念,不同的团队,不同的公司,不同的预算,实践出来的结果差异非常大,制定符合团队的DevOps 目标,解决团队实际的痛点,有利于实践。
资源:DevOps 工具有很多的云服务厂商,有预算,可以直接根据团队的需求,购买整套的基础设施,也可以利用开源的工具组装搭建,比如,Jenkins ,docker ,git ,镜像仓库等
团队文化:实践DevOps 是一次团队文化,组织架构的变革,比如引入敏捷项目管理,会根据Scrum 来调整团队的组织架构,开发可能要学习一些部署的基础知识,运维可能要学习一些开发的基础知识,Scrum中文网:https://www.scrumcn.com/agile/scrum-knowledge-library.html
实践
- 代码分支
- 明确开发,测试,线上等分支,明确分支的职责,设置对应的权限,制定符合团队的分支管理流程
- 明确代码合并的机制,制定合并的规则,例如
- 单元测试不通过,不能进行合并
- 代码Code Review 后才能合并
- 代码环境变量
- 明确环境所对应的代码环境变量
- 后端
- 开发环境:dev ,测试环境:test
- 前端
- 开发环境:dev ,测试环境:test
- 后端
- 明确代码依赖组件的环境
- Redis ,数据库 ,消息队列, 日志等
- 统一的命名方式,根据团队情况,看是否做每个组件环境的隔离
- 最好统一技术栈和统一依赖的版本
- 前端依赖包私有化:proget 等
- 明确环境所对应的代码环境变量
- 资源
- 明确有哪些可用的资源,比如,服务器,硬盘
- 根据预算资源和目标,寻找云服务的厂商,直接采购完整的DevOps平台
- 工具
- 使用开源的工具进行搭建
- 根据目标和目前实际部署情况,选择合适的工具,团队讨论,制定部署的方式和流程
- 基于docker部署:镜像仓库,docker,docker-compose 等
- 基于文件的方式部署
- 结合可用的资源,明确部署流程中,服务器资源的作用,以及承担的职责,画出部署图
- 根据目标和目前实际部署情况,选择合适的工具,团队讨论,制定部署的方式和流程
- 使用云服务进行搭建
- 阿里云云效 DevOps 平台
- 华为云 DevCloud 平台
- 使用开源的工具进行搭建
持续集成
- 自动化构建项目流程
- 从源码仓库签出最新的代码
- 选择源代码管理工具,要支持webhooks , 比如:GIT
- 选择合适的CI任务触发机制,比如,提交代码就进行CI,或者手动点击CI任务进行CI
- 静态分析,检查最新的代码是否存在潜在的 bug 并符合项目的编码规范
- 项目代码中选择合适的编码规范,比如Resharper,Sonar 等
- 集成SonarQube工具进行代码的检查,可视化的监控代码的质量
- 编译源码
- 编译源码看是否能成功编译
- 运行单元测试
- 根据团队的实际情况,为代码编写单元测试,制定单元测试标准
- 不要盲目追求覆盖率,而是思考业务上的价值(重要性与风险)
- 自动化运行单元测试,运行失败进行反馈,也可以利用可视化的工具,监控单元测试情况
- 单元测试运行失败,开发人员应该及时的进行修复,保证CI的正常运行
- 运行集成测试
- 自动运行集成测试
- 打包
- 自动化打包
- 从源码仓库签出最新的代码
持续部署
- 根据部署可用的资源,明确部署的方式,讨论出部署的方案
- 基于容器部署
- 基于文件部署
- 明确部署的目标,制定部署的完整流程,完善配套的方案
- 高可用
- 灰度发布
- 回滚方案
DevOps 度量指标
DevOps实践的成熟度差异很大,团队需要根据目标来制定符合团队期望的DevOps度量指标,根据团队使用的情况,不断的优化Devops,解决实际中的痛点
- 单元测试的错误率,测试覆盖率 ,CI修复时间
- 部署的频率,部署的失败率,部署时间
- 代码扫描漏洞出,BUG