如何快速复制BAT级的DevOps工具链

1、流水线改变世界
1910年,福特汽车在引入流水线生产之后,Model-T 的组装时间缩短了8倍,从12.5小时降到了1.5小时,这就是流水线改变世界的神话,造就了汽车上的国家!

那流水线怎么改变软件交付的世界呢?
2、持续交付与部署流水线
2010年,Jez Humble 的大作《持续交付-发布可靠软件的系统方法》出版,软件交付的世界因此大不同,部署流水线就是其中非常重要的一章。
2.1 部署流水线的定义

大神 Jez Humble 对部署流水线的定义:部署流水线是指软件从版本控制库到用户手中这一过程的自动化表现形式。对软件的每次变更都会经历一个复杂流程才能发布。

另一位大神 Martin Fowler 认为部署流水线是持续交付的核心环节。
2.2 持续交付屋的顶梁柱
高效运维社区 DevOps 专家,前百度工程效率专家张乐同学结合自己多年的实践经验和精益屋整理出持续交付屋,其中可靠可重复的流水线就是核心内容。从提交与编译,测试与验证到部署与运维,打通软件交付的完整路径,实现真正的端到端部署流水线。

3、部署流水线案例3.1 持续交付示例流水线
在《持续交付》书中,Jez Humble 为读者提供了一套最基本的流水线示例,如图所示:

图中的多个阶段依靠类似 Jenkins 这样的持续交付引擎工具来驱动,版本控制和制品库管理是流水线的输入和输出。
3.2 百度案例
百度是工程效率非常出类拔萃的公司,敏捷和持续交付都具备很强的能力。如图就是百度建设的可靠可重复的交付流水线,通过交付流水线,将全局过程标准化、自动化、可视化。

汇聚多模块之间的部署流水线

3.3 国外案例:Netflix的流水线
纸牌屋的出品公司,国外视频的一哥 Netflix,也是一家工程能力非常优秀的公司,Netflix 基于 Jenkins 开发了持续交付平台 Spinnaker,从代码嵌入、持续集成、环境制作、部署、测试到发布等各环节都完整打通。

其中还用到了基础设施即代码、不可变基础设施等诸多实践。
4、全开源端到端部署流水线
看到这里,你一定在想:
这些大公司的经验我们真能复制吗?
在面临 DevOps 转型和落地的关键时刻,我们应该怎么办呢?
高效运维社区倾力打造的全开源端到端部署流水线就是你要的答案

4.1 流水线设计要点:
1. 全开源工具链:示例中的工具全是开源工具,涵盖依赖与镜像管理、代码管理、持续集成、代码质量、自动化测试、容器化编排和日志管理等。

2. 多阶段过程:示例中将流水线分为三个阶段:提交阶段、验证阶段、部署阶段。
· 提交阶段:代码提交 Merge Requst 前进行编译、单元测试的验证,防止破坏主线
· 验证阶段:基于主线的集成和多环境的自动化测试验证,输出可部署的高质量的版本包
· 部署阶段:基于已发布的版本包部署到生产环境
3. 开源工具集成:开源虽好,可不要贪杯哦!
开源工具链完整集成和跨领域多工具使用,是大多数企业望而却步的原因。高效运维社区的专家们基于实践经验,为大家趟平了前路。
关键点1:基于Jenkins与Gitlab集成,实现提交验证。需要使用 Gitlab API、Jenkins Gitlab 插件、Job深度配置实现完美集成

关键点2:Maven 与 Docker 集成实现镜像自动制作,我们选用 Spotify 的 docker-maven 插件与 Dockerfile 集成实现镜像的自动制作和版本关联。

关键点3:SonarQube 质量门设置和代码质量分析

关键点4:ELK 收集、分析和展示日志信息

4. 最新的 Pipeline 与 BlueOcean:
在案例中,我们选择使用 Jenkins 2.0 中全新的 Pipeline 和 BlueOcean 来实现和可是整个流水线,整个过程一览无余。

精华都在这里。流水线实录视频:https://v.qq.com/iframe/preview.html?vid=z03959pwc0r&width=500&height=375&auto=0
想要将全开源端到端的流水线带回去吗?
DevOps 强调持续改进,不断进化,高效运维社区践行 DevOps 理念,也在不断的优化和改进全开源端到端部署流水线。
8月18日的 DevOpsDays · 上海站将会发布最新的2.0版本,将加入更多的实践和工具,帮助我们的企业快速实现 DevOps 的转型和落地。
如何快速复制BAT级的DevOps工具链的更多相关文章
- 一文解读DevOps工具链 (转)
在列出DevOps 工具链之前,介绍一下什么是DevOps,虽然DevOps这个概念现在还没有标准的定义,但我们可以追溯一下其过去九年的历史发展过程(从2009年-2017年),列出几个相对明确又有所 ...
- 从大厂DevOps工具链部署,看现代产品的生命周期管理
目录 1. 认识DevOps 1.1. DevOps工具链 1.2. CI 持续集成(Continuous Integration) 1.3. CD(持续交付 & 持续部署) 1.4. Agi ...
- 研发过程及工具支撑 DevOps 工具链集成
https://mp.weixin.qq.com/s/NYm63nkCymIV3DbL4O01dg 腾讯重新定义敏捷 |Q推荐 小智 InfoQ 2020-09-03 敏捷开发奠基人 Robert C ...
- DevOps工具链
Devops工具链 DevOps实际是一种文化上的变迁,代表了开发.运维.测试等环节之间的协作,因此DevOps工具是非常多种多样的,甚至可以由多种工具组成一个完整的DevOps工具链.此类工具可以应 ...
- devops工具链概述
1. devops工具链概述 1)devops工具篇 2) 持续集成 3) 持续交付 4) 持续部署 2. devops工具链概述
- 第七章 DevOps工具链
DevOps工具生态圈 协同开发工具 敏捷开发 可视化 加强团队沟通协作 数据分析 协同开发 持续集成工具 Jenkins 自动化编译 自动化测试 自动化部署 丰富的插件库 版本管理工具 Git 简介 ...
- DevOps - DevOps工具链
不要满足于使用世界上已存在的各种方法和技术,而应重点放在希望达到的效果上! 单单使用工具不难,困难的是在团队开发中熟练使用,并形成一套理想的工作流程,只有在团队中工具和思想才能发挥最大价值. 开源工具 ...
- DevOps时代,企业数字化转型需要强大的工具链
伴随时代的飞速进步,中国的人口红利带来了互联网业务的快速发展,巨大的流量也带动了技术的不断革新,研发的模式也在不断变化.传统企业纷纷效仿互联网的做法,结合DevOps进行数字化的转型. 通常提到Dev ...
- GitLab + Jenkins + Harbor 工具链快速落地指南
目录 一.今天想干啥? 二.今天干点啥? 三.今天怎么干? 3.1.常规打法 3.2.不走寻常路 四.开干吧! 4.1.工具链部署 4.2.网络配置 4.3.验证工具链部署结果 4.3.1.GitLa ...
随机推荐
- 第一章:1-10、试在下列条件下比较电路交换和分组交换。要传送的报文共x(bit),从源站到目的站共经过k段链路,每段链路的传播时延为d(s),数据率为C(bit/s)。在电路交换时电路的建立时间为s(s)。在分组交换时分组长度为p(bit),且各结点的排队等待时间可忽略不计。问在怎样的条件下,分组交换的时延比电路交换的要小?
<计算机网络>谢希仁著第四版课后习题答案答:对电路交换,当t=s时,链路建立: 当t=s+x/C,发送完最后一bit: 当t=s+x/C+kd,所有的信息到 ...
- Razor 常用方法
结合wdate使用 //WdatePicker控件时间限制 @Html.TextBoxFor(model => model.BookingStart, new { @onClick = &quo ...
- [scrapy] exceptions.TypeError:XXX is not json serializable
原因是spider获取items.py中定义的字段的时候,忘记extract()了 def parseItem(self,response): sel = Selector(response) ite ...
- Hadoop打包成jar包在集群上运行时出现的各种问题以及解决方案
之前将eclipse下编好的mapreduce代码放到集群上面跑,发现速度很慢,namenode节点的cpu和内存使用率很低,datanode节点基本上处于没有运行的状态,然后通过查看hadoop-e ...
- MySql笔记之修改数据库编码
修改前(系统默认编码) 查看编码命令: show variables like '%char%'; show variables like 'character%'; 两种方法 a) 暂时性修改 SE ...
- 大数据技术之_16_Scala学习_09_函数式编程-高级
第十三章 函数式编程-高级13.1 偏函数(partial function)13.1.1 提出一个需求,引出思考13.1.2 解决方式-filter + map 返回新的集合13.1.3 解决方式- ...
- ELK故障:elk在运行一段时间后,没有数据。
故障排查: 1. 查看kafka.logstash.elasticsearch进程是否运行正常,显示正常. 2. 使用logstash在前台运行,有日志输出 3. 查看kafka的topic的offs ...
- oracle Update a table with data from another table
UPDATE table1 t1 SET (name, desc) = (SELECT t2.name, t2.desc FROM table2 t2 WHERE t1.id = t2.id) WHE ...
- java copy array
13down voteaccepted Here's a java 1.4 compatible 1.5-liner: int[] array = { 1, 2, 3, 4, 5 }; int siz ...
- La 4976 Defense lines
蓝书紫书上都有的一道题...这里就懒得说题解了. 但是我竟然WA了6次!为什么呢??? 一开始没看见连续子序列..... 后来插入的时候忘判断了是不是比前驱大.... 所以我们只需要维护一个权值递增( ...