logo

地址:深圳南山区大冲国际中心21楼

联系我们 : contact@wise2c.com

产品支持 : service@wise2c.com

售前咨询 : sales@wise2c.com

电话: +86 (755) 33268246

粤ICP备16049363号

听睿云智合CTO徐年刚畅谈金融行业基于容器技术的DevOps

深圳睿云智合科技有限公司 > 睿云新闻  > 听睿云智合CTO徐年刚畅谈金融行业基于容器技术的DevOps

听睿云智合CTO徐年刚畅谈金融行业基于容器技术的DevOps

深圳金融IT界容器技术专题研讨会

9月6日,由深圳金融信息服务协会主办,我公司(深圳睿云智合科技有限公司)与Rancher Labs联合协办的,深圳金融IT界容器技术专题研讨会隆重召开并胜利闭幕!会议汇聚了国内外知名的云计算技术大咖,以及招商银行、平安科技、富德生命人寿、广发证券等国内金融科技引领企业的容器技术实践团队的经验分享,为150多人的在场嘉宾奉上了一场堪称金融行业与最前沿容器技术的巅峰碰撞!除了深圳本地的金融行业技术人员,更有来自北京、上海、东北的多家金融机构信息技术团队积极参与,大家纷纷表示会议干货多多,收获颇丰。以下就是小编为大家整理的嘉宾分享内容系列速递,按照演讲顺序,今天为大家推出的是来自前Eucalyptus 架构师&中国区技术总监,现睿云智合CTO,国内云计算资深专家徐年刚(Nathan)的分享:《金融行业基于容器技术的DevOps》

睿云智合CTO,国内云计算资深专家徐年刚(Nathan)的分享:《金融行业基于容器技术的DevOps》

究竟DevOps是什么?DevOps是如何促进开发、测试、运维一体化?在企业有哪些实践?以及DevOps和容器技术有什么关系?CI/CD有哪些常见的解决方案?相信Nathan接下来的分享都会给大家一些重要的启发。

 

DevOps 介绍和实践

 

 

 

 

首先,Nathan简单的介绍了软件产品交付变革。在之前的软件交付中,软件的设计规划,占用的时间都比较长,导致交付到客户手中的时间就较长。随着互联网的飞速发展,现在的交付理念是:小步快跑的方式交付产品,收集用户反馈,持续对产品进行改进。之前我们更多是在讲敏捷开发、而现在更多是DevOps开发运维协作一体化,在企业中已经得到了许多实践应用。

 

什么是DevOps?

 

 

A DevOps是英文Development和Operations的组合

B DevOps是一组过程、方法与系统的统称:用于促进开发(应用程序/软件 工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合,这才是DevOps的宗旨。

DevOps

 

DevOps企业实践

 

 

DevOps在企业中的实践主要从四个方面来实施:

 

  • 持续部署(CI/CD)
  • 度量和反馈(持续运营)
  • 组织协作(建立全功能团队)
  • 架构解耦(系统解耦,技术解耦)

 

 

由于此次研讨嘉宾实在大咖,而时间却有限,所以Nathan这一次先给我们介绍CI/CD。怎么开始CI/CD实践呢?主要是从以下5个方面。

持续集成/部署流水线

这个环节是怎么样实现的呢?开发者提交代码触发代码更新,然后自动CI构建,在等待构建成功之后,开始部署和执行自动化功能测试。自动化部署成功之后,触发手动部署UAT或者生产环境上以及非功能性测试。说这么多,流水线内部是怎么样的呢?如下图:

 

基本CI构建

图1:基本CI构建

 

自动化功能、契约测试

图2: 自动化功能、契约测试

 

部署手动测试

图3:部署手动测试

 

 

那怎样CI/CD流水线设计才算是好的呢?

CI/CD流水线设计

  • 可视化:流水线的运行和停止,成功与失败对所有人直观可见;通过大显示器投放给整个团队

 

  • 反馈:流水线通过显示器,短信,邮件等多种手段及时将失败信息传达到相关团队成员

 

  • 可控制:从构建到生产发布总有一些环节是需要人手动验证的,比如UAT,发布前的批准等;端到端的流水线需要某些环节可以暂停,等待手动继续

 

  • 门禁:流水线中任何一个环节失败应该让流水线停下来,并通知团队,比如自动化测试不通过,Schema升级失败等

 

  • 关注度:当流水线发生失败时团队必须立刻有人关注并解决它,否则流水线的反馈对团队的作用就会大打折扣。Time in “Red”是对流水线关注度的一个重要度量指标

内建质量

内建质量即在软件产生的各个环节中建立固化的、自动化的质量保障体系。

我们来看下一个比较经典的质量控制体系案例:

内建质量

  • 静态程序分析

利用代码分析工具,不执行代码的情况下对其质量进行检查,包括重复代码,安全漏洞,及各种代码坏味道;

 

  • 单元测试

直接调用应用代码,对程序的输入与输出,以及执行过程是否符合预期进行测试;单元测试不能仅强调覆盖率,而要进行评审,保证有效性和场景覆盖的完整性;

 

  • 自动化契约测试

系统提供的每一个接口(Web服务,MQ或其他)都是与其消费者所达成的契约,都必须要有对应的自动化测试;

 

  • 自动化部署验证

在生产环境部署完成后,通过自动化方法对其部署是否成功,应用和服务的运行状态进行验证,以判断该部署的新版本是否能够向用户开放;

 

  • 自动化界面测试

通过模拟真实人在界面上与系统的交互,对系统的完整业务流程进行验证;这种测试方法更贴近真实,但执行效率也较低;

 

  • 自动化非功能测试

非功能测试包括性能测试,压力测试,安全性测试等,也应当集成到端到端的部署流水线中;不过并非每一个故事或特性都需要非功能测试

 

基础设施即代码

基础设施即代码,怎么做呢?脚本化一切可以脚本化的、用版本控制库管理所有脚本和代码、禁止人工操作。

版本控制库管理

  • 构建

利用Shell脚本文件(.sh)或自动构建工具来进行应用和服务的依赖管理,编译,执行测试,和生成安装包、部署包。

不同的语言有不同的构建工具,如Java的Maven,Gradle;C/C++/Objective C的gcc, CMake, Ruby的Rake等。

 

  • 环境配置

利用自动化环境管理工具来进行服务器上的软件安装,升级,配置,服务的启动和停止,权限设置,文件操作等各种任务。

目前成熟常用的IT自动化管理工具包括Puppet,Chef,Ansible等。

 

  • 数据库变更

利用数据库自动化管理工具进行数据库Schema的创建,更新,数据初始化,数据迁移等任务。

 

自动化部署

自动化部署主张:一次打包,随处部署。环境配置信息必须从代码中剥离,剥离的环境配置文件不放进应用软件包,以文件或独立jar包的形式单独部署(WebSphere,Tomcat都支持共享classpath)。且可采用配置模板文件,打包时自动替换环境参数。

自动化部署

  • 服务器应用部署
  1. 基本步骤是Server shutdown,Package upload and copy,Server startup。
  2. 可以采用Chef,Ansible等自动化工具进行自动部署。
  3. 采用其他商业化的部署工具。

 

  • 客户端或移动应用
  1. 将应用包上传到特定的位置供用户下载;如果是企业应用发布平台,建议由平台提供部署服务;或者提供权限进行包文件上传。
  2. 如果是部署到外部应用商店,如Google Play,由于频率不高通常手动进行,也可以采用自动化Web测试的方法进行自动form提交部署。

 

  • 数据库变更

1.可以采用Flyway进行数据库自动部署,前提是数据库基线和所有变更都已脚本形式在版本控制库中。

2.数据库变更前自动备份。

3.采用NoSQL数据库,如MongoDB等,免去Schema变更的需要。

 

运维监控

◦ 系统监控:通过监控工具对包括服务器运行状态,比如CPU,网络流量,磁盘,内存等,进行实时监控,并及时告警

◦ 应用和服务监控:对运行中的应用和服务的健康度进行监控,包括Web是否可访问,服务是否可用,访问并发数,响应速度等;定期进行检测以便在用户报告问题之前及早发现风险

◦ 特性监控:对某些关键特性的(业务)正确性进行持续的验证,监控其数据一致性等。这一类监控完成的,而是个持续的过程,每发布一个新特性,可能就需要增加一些监控手段

 

DevOps 和容器技术

 

既然容器技术现在正在以指数的增长趋势发展,那先来看看大家都是怎么使用容器的吧!

容器技术

容器技术

那容器将如何促进DevOps在企业中落地呢?

 

用容器打包应用

 

  • 应用交付件标准化:使用镜像,实现应用的标准化交付。
  • 将应用和依赖环境封装在一起, 解决环境依赖问题。
  • Build, Ship, Run

容器打包应用

用容器来实现自动化部署

 

 

利用容器,将应用和环境封装,解决环境部署一致性问题,方便实现应用的自动化部署。

  • 取代过去传统的用脚本进行配置环境、应用部署的方法。
  • 在部署平台上实现一整个开发/测试环境的一键部署。
  • 在实现自动部署的同时,在平台提供各种高级部署功能。
  • 滚动更新,蓝绿发布。

开发/测试环境的一键部署

用容器来优化流水线任务

 

  • 将每个流水线任务所依赖的运行环境制作成的容器镜像
  • 流水线上的任务非常适合在容器中执行,快速启动,执行完后销毁,适合大规模,并发的流水线任务
  • 灵活的流水线设计,只需要在执行任务的时候选择不同的基础镜像,就可以使用不同的技术堆栈来完成流水响任务
  • 解决流水线任务的环境冲突,比如可以在同一个构建系统里面同时用JDK8 或者JDK5 来编译应用

用容器来优化流水线任务

CI/CD解决方案

 

利用开源Jenkins  配套工具链

 

以Jenkins 核心,结合其他工具链来实现持续集成和部署, 包括集成:

  • 代码管理
  • 质量控制框架
  • 自动化部署工具或者平台

 

涌现的其他开源/商业方案

 

除了Jenkins, 目前也涌现非常多的以持续集成的方案

  • Drone
  • Go-CD
  • TeamCity
  • Travel-CI
  • PAAS 平台

 

Jenkins 为核心研发

 

Jenkins 的集成能力非常强,但功能太多,以Jenkins 为核心,简化和工具链的集成,整合容器技术。

我们将以睿云智合的实践来说明。

 

  1. 开箱即用,简化和正确地打造企业CI/CD 流水线。

 

  • 基于容器的CI/CD集成方案,开箱即用。
  • WiseBuild 简化CI/CD各种技术栈的集成和实施,以pipeline为核心,整合各种持续部署/集成流水线相关的构建,测试,部署技术。
  • WiseBuild用于开发,测试和运维团队的提供灵活的CI/CD流失线设计平台,应到开发,测试和运维团队正确的设计企业持续集成,持续部署流水线。
  • Rancher是成熟的容器管理平台,为应用的自动化部署提供成熟的功能支持

 

  1. 集成平台持续集成&持续部署

持续集成&持续部署

  1. 以流水线为中心,持续集成

 

  • Pipeline as code!灵活的流水线设计,可以为每个开发应用定义多条流水线,分别用于持续集成和部署,流水线可以包含多个stage。每个stage 用来实现代码编译,单元测试,集成测试等。

 

  • 集成各种质量框架,包括代码检查,自动化测试框架支持自动生成容器镜像支持从构建物自动生成面向开发人员的开发测试环境。

 

  • 为开发者的单元测试,集成测试提供服务集成,例如数据库集成服务支持自动化部署各种验收测试环境对接持续集成流水线和验收测试环境的对接,实现验收测试环境的自动更新和升级。

 

4.自动部署 &持续部署

 

 

  • 支持从容器管理平台导入各种运行环境,设计支持CaaS平台和PaaS平台目前支持Rancher 平台,支持Rancher的cattle, swarm, kubernets环境。

 

  • 支持和部署相关的流水线,可以代码部署分支拉取代码,编译,部署和做自动验证测试。

 

  • 支持在Rancher 环境自动化部署应用,对接应用和部署流水线。
No Comments

Post a Comment

Comment
Name
Email
Website