DevOps学习心得

来源:互联网 发布:阿里云ssl证书购买 编辑:程序博客网 时间:2024/06/07 08:06

DevOps狭义的概念是开发运维一体化,强调软件开发和运维团队之间更好的沟通协作,以便更快更高质量的软件交付。广义的讲,DevOps是一种文化,流程和实践,覆盖整个软件开发的全生命周期和所有干系人。强调项目经理、研发、测试和运维人员思维转变,更好的协作和更紧密的整合。通过自动化的流程,使得构建、测试、发布软件更加地快捷、频繁和可靠。最终的目的是提高软件质量、缩短交付周期,甚至于像工厂的流水线一样,扣动按钮,即可实现自动化的、持续的软件交付。

文化-沟通与协作

DevOps强调项目干系人,尤其是开发、测试和运维之间更早、更多的沟通和协作。DevOps认为所有人的目标是一致的,即项目高质量和按时交付,而不是仅仅限于自己的职责分工。开发团队要邀请测试和运维人员参加需求分析、系统设计、详细设计和技术选型等会议。整理需求时,不仅关注功能和性能需求,还需要了解测试和运维方面的需求,并将这些需求纳入系统设计中,以便测试团队更好的对系统进行测试,运维人员更好的对系统进行部署、监控和运营。测试团队邀请开发和运维团队参加测试脑图和测试用例讨论的会议,协助测试人员完善和优化测试方案。运维团队邀请开发和测试团队了解运维流程、工具和方案,分享经典案例,以便开发在开发过程中优化技术方案,测试在测试中补充相关的用例。
这里写图片描述

流程-自动化的持续集成

DevOps强调所有的手动的、可重复的操作都应该用自动化的工具来完成。应该像管理代码一样管理文档和配置文件。所有的操作可复制和追溯,就像生产车间的流水线一样。好消息是目前已经有足够多的经过实践检验的规范和工具,帮我们搭建这样的软件持续交付流水线。
这里写图片描述
如上图所示,软件是一个持续循环迭代的过程,包括需求、开发、构建、测试、部署、监控和运营。在每个阶段,都有相应的成熟的工具来实现自动化的操作。当然,在实际的应用过程中,只需要根据实际需要,选取部分工具即可。

  • 需求:confluence
  • 开发:jira、svn、git、gradle、maven
  • 构建:jenkins、ant、各种plugins
  • 测试:junit、monkeyrunning、Robotium
  • 部署:weblogic、tomcat、apache、应用商店
  • 监控:patrol、Nagios、Zabbix
  • 运营:数据采集、大数分析、数据可视化、echart、hchart

实践- Jenkins+Docker的微服务持续集成

微服务强调业务系统需要彻底的组件化和服务化,原有的单个业务系统拆分为多个可以独立开发,设计,运行和维护的组件。当一个应用系统拆分成几十个组件时,就需要在一台服务器建几十个虚拟机,才能把组件部署在隔离的进程里。这显然是不现实的,最好的解决办法是利用PaaS里提供的Docker容器来部署组件。每个Docker是进程级别隔离的,资源占用率也很小。

Docker是一款针对程序开发人员和系统管理员来开发、部署、运行应用的虚拟化平台。Docker 可以像集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的差异。Docker提供了一种技术,可以让开发人员方便地将应用代码以及运行时的环境一并打包到一个镜像中,然后将这个镜像上传至镜像仓库。将这个镜像下载到测试或者生产环境,然后将其启动就完成了部署。

总体方案是Gitlab做源码管理,Jenkins 做节点控制、版本管理、流程设置、触发 Job,Docker 来搭建编译部署环境。
这里写图片描述