前面的文章中介绍了,Devops的概念以及企业应用Devops能够带来的好处,请参考文章:
DevOps究竟能给企业解决什么问题
接下来我来介绍一下Devops要想实际落地,那么我们需要解决的问题有哪些。我将从产品需求、开发、测试、运维的角度来分享Devops落地的实际经验。
核心
部署流水线核心软件开发过程是一个将客户或用户的想法变成一个真实可用的特性的过程。部署流水线是这个过程中的一部分,是指软件从版本控制库到用户手中这一过程自动化的展现形式。这一过程包括编译构建、代码检查、上传制品库、测试和部署等,并且这些阶段的执行都应该是自动执行的。自动化带来的好处是这个流程变得更快、可重复且更加可靠。部署流水线的核心是使用jenkins作为各个节点的串联,然后在各个流程节点中使用一系列的工具来实现流水线的自动化!如下图所示:
13条经验
产品需求
1.产品定义、里程碑规划和用户需求分析
可以使用影响地图、用户故事、看板等方法。
开发
2.代码预检查
代码预检查就是在代码提交到代码库之前对代码进行检查,包括静态检查、Code Review、测试、编译等多种方式。
3.技术债务管理
主要的技术债务包括:
没有文档或者跟版本不同步;
过时的架构设计;
需要重构的代码;
遗留代码缺乏文档和单元测试,无人能改,无人敢改。
注意:未实现的功能需求不属于技术债务。
技术债务管理的核心是:在技术债务产生之前能避免则避免,不能避免的可以借助工具提前发现,对于发现的技术债务尽可能早的偿还掉。
4.第三方组件管理
使用第三方组件,可以不必“重复造轮子”,节约了时间和精力,加快了软件开发的过程。第三方组件已经是软件开发不可或缺的组成部分。然而,使用第三方组件并非易事。主要有以下几方面的问题:
组件会存在缺陷或安全漏洞;
组件的版本会过时;
组件需要额外的维护成本。
通常对第三方组件管理需要关注以下两个方面:
依赖扫描:能够扫描出依赖存在的问题,包括是否存在安全漏洞以及版本是否过时。
依赖管理:制定黑白名单,控制策略和影响范围。黑名单指不允许使用的组件。白名单是可以使用的组件。控制策略指的是当发现组件有问题时采取的措施,如阻断,警告。影响范围指的该控制策略的应用范围,如当前系统,所有系统等。当检测到依赖组件中包含了黑名单中的组件,按照设置好的控制策略对该组件进行处理,比如编译失败,邮件通知负责人等。
5.非功能需求的管理
非功能需求的实现是有成本的,而且它们之间可能彼此排斥,因此我们必须权衡利弊。比如,对安全性要求高的系统往往易用性就不会太好。在实际开发中,考虑到系统的交付时间,系统的总成本,往往会根据非功能需求的实现难度,做出权衡。
6.API管理
API 管理就是有效管理企业内部各服务提供的API 接口和对外暴露的共有接口,管理 API 接口的创建、测试、发布等生命周期,以及 API 接口的版本、并提供 API 开发者门户供开发人员查看。服务的 API 接口在构建时自动地注册到 API 管理平台的 API Gateway 中,其他调用方可以通过 API Gateway 访问这些接口提供的服务,并基于 API Gateway 进行 API 的自动化测试,保证 API 的正确性和健壮性。
7.配置管理
配置管理是指一个过程,通过该过程,所有与项目相关的产物,以及它们之间的关系都被唯一定义、修改、存储和检索。例如,可以基于 Git 的方式,在应用程序部署时提供特定环境的配置文件,实现了代码与配置的隔离,保证了代码的唯一性。
8.持续集成
这里持续的意思并不是“始终,一直”,它的意思是“随时”。比较恰当的频率是:每当有人提交代码,同时集成一次。通常分为即时集成和定时集成。
即时集成:是指团队成员每次提交之后就进行集成,并执行编译、构建、自动化测试等任务来检查个人提交的代码是否可用。这种集成方式要求执行的时间要短,要快速反馈结果,因此只能执行一些简单的测试。
定时集成:类似每日构建(Daily Build),是指每天定时(一般为晚上)自动执行一次集成过程,第二天将执行结果发送给关系人。这种集成方式注重的是检测的全面性和彻底性,对执行时长要求不高。
测试
9.测试数据管理
测试数据管理指对测试数据的自动创建以及销毁。主要包括验证业务基础功能的少量测试数据和验证核心业务性能所需要的大规模测试数据。
10.自动化测试
指对产品的UI测试、服务的接口测试以及代码的单元测试通过测试代码来实现。
运维
11.实时监控
将所有主机加入监控,时刻掌握他们的状态,一旦有指标不正常,触发器触发告警,可通过微信、钉钉、邮件方式进行告警.
12 日志收集
当集群环境壮大之后,某一个模块可能会部署多个节点,再登录到机器上查看某一模块的日志就变得很困难,通常可以通过elk来建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
13 环境管理
环境管理就是准备部署环境的过程以及部署之后对环境的管控。既能保证准备环境的快速和一致性,又使得部署后的环境能够有效利用。一般环境分为,集成环境、测试环境\类生产环境和生产环境。如果想要高效管理各种环境,必须通过脚本实现环境的创建与部署工作,即一键部署。