工欲善其事,必先利其器。
DevOps是一个系统工程,在基于KOCA开发产品的DevOps实践中,我们落地了一套完整的适合行业的DevOps工具链,这套工具链经过持续筛选、升级、改进,让我们软件交付的速度和质量都有很大提升。
这套工具链技术方面都不算复杂,其中有不少我们耳熟能详的东西,也有不少工具正在使用,只是与传统开发运维不一样,系统地“串”了起来,打组合拳,所以不用担心,只要花上一点时间就可以用好。
一个好的DevOps工具链是一系列不同的DevOps工具,用于解决特定的业务挑战。它们以链条相连,保证前端和后端开发人员、质量分析人员和客户之间的循环。目标是使开发和部署流程自动化,以确保快速、可靠且预算友好地交付创新解决方案。
成功构建一套 DevOps 工具链并不容易。需要大量调研、选型、实践和不断的完善,保证必要的流程都是自动化的。
DevOps工具链实践
DevOps的原则是持续改进,因此,我们的工具链选型也是分阶段不断改进。
源代码管理/仓库管理: Git/Gitlab
GIT是分布式的源代码管理工具,没有中心服务器的概念。每个开发人员都可以获得完整的代码库。即使不连网,也能进行几乎所有的操作。
之前使用的SVN是集中式的源代码管理工具,通常必须连到公司的服务器上才能正常工作。
使用GIt时,代码库在本地,内容可以很快地提交,不会受网络影响。提交的频率就可大大提高,代码的历史记录也更加详细。
低代码开发: KOCA-LCP
前端低码:提供页面模板,支持高低代码组合开发,支持web端与移动端两种。
后端低码:支持数据模型设计、接口设计、版本管理、自动生成代码等
自动化构建:Maven+Nexus
Maven是基于Java平台的优秀构建工具,是实现自动化构建过程的基础,可以通过简单的操作命令完成从清理、编译、测试到生成报告,再到打包和部署全部过程。
我司统一使用Sonatype的开源软件Nexus作为搭建组织级Maven私服的仓库管理软件,并指定专人对私服进行日常的运维管理和授权管理。
静态代码检查:Sonar+ESLint
后端代码检查:Sonar
sonar是一个用于代码质量管理开源平台,用于管理源代码的质量,可以从多个维度检测代码质量。
前端代码检查:ESLint
ESLint是一个插件化的javascript代码检测工具。在团队协作中,为避免低级 Bug、产出风格统一的代码,通过预先制定编码规范。使用 ESLint工具和代码风格检测工具,则可以辅助编码规范执行,有效控制代码质量。ESLint可以帮助我们检查Javascript编程时的语法错误。
实际开发中
1、团队中前端开发在编辑器安装ESlint插件,后端也本机装有Sonarlint插件,从源头上避免问题。
2、在Jenkins中,加入静态代码检查,每周进行检查并自动邮件发送结果给相关人员
持续集成与持续交付(CI/CD):KDOP流水线/Jenkins
KDOP流水线模块将各研发或检查工具(svn、git、maven、ant、Docker、Sonar、Checkstyle等等),利用脚本或配置文件bat、shell、python、jenkinsfile等将上述进行串联,实现研发过程的自动化。
Jenkins特别推荐Jenkins2.0,它的主要特征分别是Pipeline as Code,全新的开箱体验和1.x的兼容性。
Pipeline as code是从CI到CD的革命性转变。pipeline是Jenkins2.0推出的一套Groovy DSL语法,将原本独立运行于多个Job或者多个节点的任务统一使用代码的形式进行管理和维护。
这样将复杂的Job之间的调用关系可视化,减少复杂的Job上下游关系的维护成本,而使用Code的方式进行管理会非常容易进行功能的维护和扩展。
pipline的实践让我们避免了不少重复造轮子的事情。
例1:开发环境、测试环境、演示环境都是在做同样的事,我们不必写三个流水线,而是提炼公共方法,直接传入参数调用即可。
例2:我们在升级数据库、编译、部署前后端,进行了静态代码扫描后,想加一个Dependency-Check Results依赖组件安全扫描,这时只需要加一段代码,或调用之前写好的。
自动化测试:KDOP/Jmeter
平台自动化测试底层采用Robot Framework自动化测试框架,在使用中引入版本概念,可以进行接口自动化、web自动化和APP自动化测试
代码覆盖率度量:Jacoco
代码覆盖(Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。
Jacoco是一个开源的代码覆盖率工具,可以嵌入到 Ant 、Maven 中,并提供了 EclEmma Eclipse插件,也可以使用 Java Agent 技术监控 Java 程序。很多第三方的工具提供了对 Jacoco 的集成,如 sonar、Jenkins 等。
实践中:我们将Jacoco集成到Jenkins进行单元测试代码覆盖率度量
容器平台:Kubernetes、Docker
Kubernetes是一个来自google的开源项目,用于统一管理处理容器化的应用。简称K8s
K8s 最著名优势特色是:一个平台搞定所有
如果你有上云的需求,那么使用k8s,这间会是一件相当简单的事情,k8s,会让你无缝迁移云环境,从google的cloud到aws再到微软的环境,任意迁移。
Docker是一个开源的应用容器引擎,可以将应用及依赖到一个可移植的容器中
传统虚拟化方式不同,Docker引擎将一些各自独立的应用程序和它们各自的依赖打包,相互独立直接运行于未经虚拟化的宿主机硬件上,同时各个容器也没有自己的内核,比传统虚拟机更轻便。
一个K8S系统,通常称为一个K8S集群,每个集群有多个节点,每个节点可运行多个容器,K8S就是用来管理这些容器的。
微服务: KOCA
KOCA是金证基于主流、开放、标准、安全的技术体系,全新打造的开放云原生平台。
KOCA-MSA微服务架构采用化整为零思想,模块化、分布式化,将传统应用架构分割成多个不同的服务个体,通过微服务架构实现系统间互联互通、核心模块弹性扩容,大幅降低开发复杂度,节约成本,加快交付速度;同时便于企业制定宏观策略,实现业务创新,满足企业业务快速增长的需求。
当前多个产品项目已使用KOCA云原生平台,平台也在持续不断地响应变化,为各位产品项目提供服务
日志与监控:KOCA-AMO
KOCA-AMO(KOCA监控运维中心)采用统一监控思想,实现可视化监控管理,可及时发现系统异常,能够跨平台、跨系统快速的定位问题;基于容器化技术实现敏态化部署,采用打包方式实现了应用高可移植性,不依赖于特定的基础架构(虚拟机,混合云等),能够实现快速交互,同时也降低系统的资源开销
项目管理:KDOP(金证Devops综合管理平台)
KDOP(金证Devops综合管理平台)集需求管理、代码检测、测试管理、流水线、制品库以及文档管理于一体,配置灵活、功能全面,支持敏捷流程管理。
DevOps,思路的转变重于技术提升,但技术提升同样重要,其中,实验和不断的完善工具链,保证必要的流程是完全自动化的是非常重要的一部分。
我们将不断学习与探索。