42
CICD,使用Docker技术实现每日 十次发布 王天青 首席架构师@麻袋理财

从CI到CD[麻袋理财王天青]v1

Embed Size (px)

Citation preview

Page 1: 从CI到CD[麻袋理财王天青]v1

从CI到CD,使用Docker技术实现每日十次发布

王天青首席架构师@麻袋理财

Page 2: 从CI到CD[麻袋理财王天青]v1

Agenda• About Me• About 麻袋理财• 独角兽成功秘诀

• 思考及解决方法• 敏捷基础架构• 微服务,What, How, Why?

• CI/CD• 麻袋理财的实践

• 总结

Page 3: 从CI到CD[麻袋理财王天青]v1

About Me• 南京大学计算机科学与技术系硕士。

• 资深Java程序员,2003年开始从事J2EE开发,从软件开发做到架构设计。

• 08年加入EMC中国研究院,最高担任云平台主任研究员,长期从事云计算创新技术解决方案设计和实现。

• 2015年9月加入麻袋理财,任首席架构师

• 在工作期间,分别在中国和美国提交了20+专利申请,其中”Data provenance in computing infrastructure [United States 8,700,678]”, “Lightweight appliance for content storage [United States 9,165,009]”和”Analytics platform for automated diagnosis, remediation, and proactive supportability [United States 9,313,091]”分别在在2014/4,2015/10和2016/4被美国专利局正式授权。

Page 4: 从CI到CD[麻袋理财王天青]v1

www.madailicai.com

Page 5: 从CI到CD[麻袋理财王天青]v1

独角兽成功秘诀

Page 6: 从CI到CD[麻袋理财王天青]v1

独角兽们

Page 7: 从CI到CD[麻袋理财王天青]v1

成功秘诀

• Speed of innovation (天下武功,唯快不破)• Always-available services (随时、随地可用)• Web scale(从0到1,快速扩展)• Mobile-centric user experiences (移动为王)

Page 8: 从CI到CD[麻袋理财王天青]v1

读物

Ten Deploys Per Day. Why Not?一天十发,有何不可?

Page 9: 从CI到CD[麻袋理财王天青]v1

思考及解决方法

Page 10: 从CI到CD[麻袋理财王天青]v1

乱花渐欲迷人眼 & 冰山一角

软件

流程

工具

技术

组织

Page 11: 从CI到CD[麻袋理财王天青]v1

正本清源

ROI

速度

架构 模块化 服务化 微服务

Dev 领域模型 系统设计 接口设计

DevTest 接口测试 集成测试 系统测试

DevOps CI CD 自动化

质量

架构 高可用 高性能 高安全

Dev 编码规范 单元测试 代码评审

DevTest 自动化测试 分支覆盖率 测试覆盖率

DevOps 系统监控 应用监控 业务监控

业务驱动技术 技术推动业务

Page 12: 从CI到CD[麻袋理财王天青]v1

解决方案

•Cloud Native Application• Cloud Native describes the patterns of high

performing organizations delivering software faster, consistently and reliably at scale.

• Continuous delivery, DevOps, and Microservices label the why, how and what of the cloud natives.

Page 13: 从CI到CD[麻袋理财王天青]v1

Cloud Native的五个层面

微服务(技术)

敏捷基础设施(技术)

持续集成/持续交付(管理)

DevOps(管理)

康威定律(管理)

其他最佳实践

Page 14: 从CI到CD[麻袋理财王天青]v1

好处

更快的上线速度细致的故障探测和

发现故障时自动隔离

故障时自动恢复 方便的水平扩展

Page 15: 从CI到CD[麻袋理财王天青]v1

敏捷基础架构

Page 16: 从CI到CD[麻袋理财王天青]v1

支撑微服务的平台

VMwareESX

Public Cloud

IDC

VPN

Private Cloud

Developer

TesterDevOps

Page 17: 从CI到CD[麻袋理财王天青]v1

微服务What, How, Why?

Page 18: 从CI到CD[麻袋理财王天青]v1

符合微服务规范 (12 FactorApp)

• 基准代码(Codebase):代码必须纳入配置库统一管理。

• 依赖(Dependencies):显式的声明对其他服务的依赖,比如通过Maven、Bundler、NPM等。

• 配置(Config):对于不同环境(开发/staging/生产等)的参数配置,是通过环境变量的方式进行注入。

• 后台服务(Backing services):对于DB、缓存等后台服务,是作为附加资源,可以独立的Bind/Unbind。

• 编译/发布/运行(Build、Release、Run):Build、Release、Run这三个阶段要清晰的定义和分开。

• 无状态进程(Processes):App的进程是无状态的,任何状态信息都存储到Backing services(DB,缓存等)。

• 端口绑定(Port binding):App是自包含的,所有对外服务通过Port Binding暴露,比如通过Http。

• 并发(Concurrency):App可以水平的Scaling。

• 快速启动终止(Disposability):App进程可以被安全的、快速的关闭和重启。

• 环境一致性(Dev/prod parity):尽可能的保持开发、staging、线上环境的一致性。

• 日志(Logs):把日志作为事件流,不管理日志文件,通过一个集中的服务,由执行环境去收集、聚合、索引、分析日志事件。

Page 19: 从CI到CD[麻袋理财王天青]v1

微服务核心关注点

• Distributed/versioned configuration – 配置中心• Service registration and discovery – 服务注册

/发现• Routing – 路由• Service-to-service calls – API调用• Load balancing – 负载均衡• Circuit Breaker – 容错• Asynchronous – 异步• Distributed messaging – 分布式消息

Page 20: 从CI到CD[麻袋理财王天青]v1

微服务好处

技术异构性 弹性 扩展

简化部署与组织架构

匹配可组合性

Page 21: 从CI到CD[麻袋理财王天青]v1

Spring Boot/Cloud

• All in one• 全套!!!

Page 22: 从CI到CD[麻袋理财王天青]v1

Spring Boot• Stand-alone Spring-based applications• Tomcat embedded container (supports

Jetty & JBoss Undertow too) • Starter POMs• Annotation driven• Java Configuration Beans• http://start.spring.io/

Page 23: 从CI到CD[麻袋理财王天青]v1

Spring Cloud

• Microservice friendlycomponents:• Distributed&versionedconfiguration• Servicediscovery• LoadBalancing• Circuitbreakers• Distributedmessaging

Page 24: 从CI到CD[麻袋理财王天青]v1
Page 25: 从CI到CD[麻袋理财王天青]v1

CI/CD

Page 26: 从CI到CD[麻袋理财王天青]v1

CI/CDContinuous Integration Continuous Delivery

Page 27: 从CI到CD[麻袋理财王天青]v1

自动化自动化代码管理

自动化测试

自动化发布

自动化资源分配自动化安全检测

自动化监控

自动化故障处理

DevOps 八荣八耻

•以可配置为荣,以硬编码为耻 。•以系统互备为荣,以系统单点为耻 。•以随时可重启为荣,以不能迁移为耻 。•以整体交付为荣,以部分交付为耻 。•以无状态为荣,以有状态为耻 。•以标准化为荣,以特殊化为耻 。•以自动化工具为荣,以人肉操作为耻 。•以无人值守为荣,以人工介入为耻 。

Page 28: 从CI到CD[麻袋理财王天青]v1

麻袋理财的实践

Page 29: 从CI到CD[麻袋理财王天青]v1

方法与工具(麻袋理财实践版)

开发 测试 运维

CI/CDJenkins + Docker

Git-flowGitlab

Code AnalysisSonar

Issues/Milestones/WikiGitlab

Team CollaborationTeambition

Status/Perf MonitoringNagios/Zabbix

Log MonitoringELK

Running EnvCloud+Docker

Deploy/Config AutomationAnsible/Bash Scripts

APMELK

UI测试Selenium/Appium

接口测试Robot/Sniper

性能测试Jmeter/LoadRunner

功能测试Manual*

Page 30: 从CI到CD[麻袋理财王天青]v1

业务架构

基础架构

基础服务层 DisConf Dubbo

基础业务服务 支付 帐务 合同 短信 客户征信

业务服务 审批 电销 网销 催收

Page 31: 从CI到CD[麻袋理财王天青]v1

拆分原则

• 单一职责:每一个模块(服务)只做一件事情• 项目粒度:每一个可以单独进程跑的项目拆分为

一个单独的项目• 代码与配置分离:Build->Release->Run

Page 32: 从CI到CD[麻袋理财王天青]v1

代码管理

• 使用Git• 使用Git flow

Page 33: 从CI到CD[麻袋理财王天青]v1

接口管理: Swagger

Page 34: 从CI到CD[麻袋理财王天青]v1

代码质量管理: SonarQube

Page 35: 从CI到CD[麻袋理财王天青]v1

CI: Jenkins + Docker

• Commit code to Gitlab• Gitlab触发Jenkins任务• Jenkins任务启动Maven基础镜像进行:• Build• Unit Test (集成Sonar)• Deploy: 发布snapshot版本到本地Maven仓库

• Jenkins回调Gitlab, 将结果反馈

Page 36: 从CI到CD[麻袋理财王天青]v1

CD: Jenkins + Docker• Merge request (Dev to UAT) at Gitlab• Gitlab触发Jenkins任务• Jenkins任务启动Maven基础镜像进行:

• Build• Deploy: 发布RC版本到本地Maven仓库

• Jenkins触发下一个构建镜像的任务• 基于Dockerfile构建Docker镜像• 推送镜像到Harbor仓库• 在UAT服务器上启动镜像• 进行端到端的自动化测试(如果有)

• Jenkins回调Gitlab, 将结果反馈

Page 37: 从CI到CD[麻袋理财王天青]v1

编排-Docker Compose

• 配置• 支持环境变量的方式配置应用参数。利用docker-compose将所有的配置单独

的保存在一个git仓库中。

• 配置复用• 由于各个项目启动参数,配置项存在相同的部分和不同的部分,因此可以利用

docker-compose的override的特性实现配置的复用。例如 docker-compose -f docker-compose.yml -f docker-compose.sit.yml -f docker-compose.sit.project.yml up –d

• 容器启动的参数,如log driver/Volume/Network等的配置可以放在docker-compose.yml中,部署环境相关的内容放在docker-compose.sit.yml,特定项目的配置放在docker-compose.sit.project.yml中,多个yml中配置项相同的,越往后的优先级越高。

Page 38: 从CI到CD[麻袋理财王天青]v1

集群管理(Swarm+Shipyard)

Page 39: 从CI到CD[麻袋理财王天青]v1

Docker Registry: Harbor

• Anopensourceenterprise-classregistryserver.• Apache2license.• https://github.com/vmware/harbor/

Page 40: 从CI到CD[麻袋理财王天青]v1

灰度发布

应用停止处理新请求(管理接口)

更新Nginx配置(切流量)

等待应用处理完当前请求

停止当前容器(管理接口+Docker命

令)

启动新版本容器

灰度验证(基于IP或者Header)

更新Nginx配置(切流量)

更新其余容器

更新Nginx配置(恢复配置)

Page 41: 从CI到CD[麻袋理财王天青]v1

总结

• 微服务化:• 模块化->服务化->Docker化

• 充分的单元测试,接口测试,集成测试• 一切都要自动化• CI• CD

Page 42: 从CI到CD[麻袋理财王天青]v1

感谢