【基础理论】Jenkins CI/DI持续集成部署
一.CI/DI持续集成&部署
一、什么是持续集成?
持续集成是一个开发的实践,需要开发人员定期集成代码到共享存储库。这个概念是为了消除发现的问题,后来出现在构建生命周期的问题。持续集成要求开发人员有频繁的构建。最常见的做法是,每当一个代码提交时,构建应该被触发。
1、CI/DI简介
互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:
编码 --> 构建 --> 集成 --> 测试 --> 交付 --> 部署
正如你在上图中看到,[持续集成(Continuous Integration)]、[持续交付(Continuous Delivery)]和[持续部署(Continuous Deployment)]有着不同的软件自动化交付周期。
2、持续集成[CI]
上面整个流程中最重要的组成部分就是持续集成(Continuous integration,简称CI)。
持续集成指的是,频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分交
付,频繁进行集成以便更快地发现其中的错误。
它的好处主要有两个:
快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;
防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成并不能消除Bug,而是让它们非常容易发现和改正。持续集成的目的,就是让产品可以快速迭
代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个
测试用例失败,就不能集成。
3、持续交付
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上
4、持续部署[DI]
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
持续部署的前提是能自动化完成测试、构建、部署等步骤。
总的来说,持续集成、持续交付、持续部署提供了一个优秀的 DevOps 环境。对于整个开发团队来说,能很大地提升开发效率,好处与挑战并行。无论如何,频繁部署、快速交付以及开发测试流程自动化都将成为未来软件工程的重要组成部分。
二.谈谈持续集成,持续交付,持续部署之间的区别
假如把开发工作流程分为以下几个阶段:
编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署
正如你在上图中看到,「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」有着不同的软件自动化交付周期。
持续集成
持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。“持续集成”源自于极限编程(XP),是 XP 最初的 12 种实践之一。
CI 需要具备这些:
- 全面的自动化测试。这是实践持续集成&持续部署的基础,同时,选择合适的自动化测试工具也极其重要;
- 灵活的基础设施。容器,虚拟机的存在让开发人员和 QA 人员不必再大费周折;
- 版本控制工具。如 Git,CVS,SVN 等;
- 自动化的构建和软件发布流程的工具,如 Jenkins,flow.ci;
- 反馈机制。如构建/测试的失败,可以快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。
持续集成的优点
- “快速失败”,在对产品没有风险的情况下进行测试,并快速响应;
- 最大限度地减少风险,降低修复错误代码的成本;
- 将重复性的手工流程自动化,让工程师更加专注于代码;
- 保持频繁部署,快速生成可部署的软件;
- 提高项目的能见度,方便团队成员了解项目的进度和成熟度;
- 增强开发人员对软件产品的信心,帮助建立更好的工程师文化。
持续集成,该从何入手
最重要的一环是选择合适的持续集成系统。是搭建私有部署还是选择托管型持续集成系统,关键在于团队运行的基础设施,团队对持续集成系统的资源投入力度。
对比一下私有部署和托管型持续集成系统,或许能帮助你更好地做出选择。
- Self Hosted CI 指的是将软件部署在公司的机房或内网中,需要提供多台服务器来完成 CI 系统的运转,同时需要对不同机器之间进行环境配置。比如Maven 或 Gradle 或 Jenkins ,他们的特点是自由开源,且文档支持广泛。优点在于对构建环境有完全的控制权,能够实现完全定制。但需要搭建环境和配置、维护成本高,需要买专门的机器,花费较多人力物力且更新迁移风险高;
- Hosted CI 指的是由 SaaS 型的 CI 服务,全程在线进行构建配置,不需要考虑装机器,装软件,环境搭建等成本。常见的有 CircleCI,Codeship 和 TravisCI 等,还有国内最新的持续集成服务——flow.ci 。SaaS 型的 CI 的特点在于无需额外机器,几分钟就可以用起来。可以根据你的需要动态调度资源。省时,省心,省力。
整体而言,Jenkins 过去一直是大部分公司的选择,但这个现象正在发生改变,随着公有云服务、Docker,SaaS 的普及,越来越多的企业开始选择 Hosted CI,也就是托管型持续集成系统。
另外,在选择合适的持续集成服务时,还需要考量系统的灵活度以适应公司不同阶段的开发测试需求。
选择持续集成系统只是持续集成应用的其中一步,还需要建立合适的持续集成文化比如代码质量管控、测试文化等。做好持续集成,可为持续交付与持续部署打好坚实基础。
持续交付
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
试想想,如果说等到所有东西都完成了才向下个环节交付,导致所有的问题只能再最后才爆发出来,解决成本巨大甚至无法解决。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中进行更多的自动化测试。如果代码没有问题,可以继续手动部署到生产环境中。当然,持续交付并不是指软件每一个改动都要尽快部署到产品环境中,它指的是任何的代码修改都可以在任何时候实施部署。
持续交付的好处
持续交付和持续集成的优点非常相似:
- 快速发布。能够应对业务需求,并更快地实现软件价值。
- 编码->测试->上线->交付的频繁迭代周期缩短,同时获得迅速反馈;
- 高质量的软件发布标准。整个交付过程标准化、可重复、可靠,
- 整个交付过程进度可视化,方便团队人员了解项目成熟度;
- 更先进的团队协作方式。从需求分析、产品的用户体验到交互 设计、开发、测试、运维等角色密切协作,相比于传统的瀑布式软件团队,更少浪费。
持续部署
持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称为“Continuous Release”。
为什么说持续部署是理想的工作流程?
“开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测试结果决定是否部署到预演环境,如果成功部署到预演环境,进行整体验收测试,如果测试通过,自动部署到产品环境,全程自动化高效运转。”
实际上,产品在从需求到部署的过程中,会经历若干种不同的环境,例如 QA 环境、各种自动化测试运行环境、生产环境等。这些环境的搭建、配置、管理,产品在不同环 境中的具体部署,状况是比较非常复杂的,从头到尾地全自动持续部署的确困难。那么,如果能做到持续交付,保证代码在模拟环境没问题,也许团队成员做到真正的心理有数。
持续部署的优点
持续部署主要好处是,可以相对独立地部署新的功能,并能快速地收集真实用户的反馈。
“You build it, you run it”,这是 Amazon 一年可以完成 5000 万次部署,平均每个工程师每天部署超过 50 次的核心秘籍。
最后
「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」提供了一个优秀的 DevOps 环境,对于整个团队来说,好处与挑战并行。无论如何,频繁部署、快速交付以及开发测试流程自动化都将成为未来软件工程的重要组成部分。
【基础理论】Jenkins CI/DI持续集成部署相关推荐
- WTM框架使用技巧之:CI/DI(持续集成/持续部署)
快点关注我们吧 作者介绍 王晓东,从事工业物联网行业多年,深入了解纺织.汽车零部件等制造业业务.开发过MES.WCS.SCADA.智能产线.质量追溯.工业通讯.linux网关等系统.对跨平台部署.运维 ...
- Docker+Jenkins+Harbor+Rancher持续集成部署分布式项目
目录 一.Docker篇 1.Docker 概述 2.Docker 平台 3.我可以使用 Docker 做什么? 3.1.快速.一致地交付应用程序 3.2.响应式部署和扩展 3.3.在相同硬件上运行更 ...
- Jenkins持续集成部署工具
目录 1 持续集成 1.1 软件开发生命周期 1.2 软件开发瀑布模型 1.3 软件的敏捷开发 1.4 什么是持续集成 1.5 持续集成的好处 2 Jenkins安装配置 2.1 Jenkins介绍 ...
- Jenkins Gitee 实现持续集成CI/CD工具【免费、推荐】
文章目录 1. Jenkins & Gitee持续集成流程 2. Jenkins安装Gitee插件 3. 插件配置 4. 安装NodeJS 5. 新建构建任务 5.1 General 5.2 ...
- Android架构篇-5 CI/CD(持续集成、持续交付、持续部署)
Android架构篇-5 CI/CD(持续集成.持续交付.持续部署) CI CI是指持续集成,代码的更新会定期自动构建.测试并合并到公共仓库中,方便多分支时解决冲突问题 CD CD是指持续交付和/或持 ...
- iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署)
iOS架构篇-5 CI/CD(持续集成.持续交付.持续部署) CI CI是指持续集成,代码的更新会定期自动构建.测试并合并到公共仓库中,方便多分支时解决冲突问题 CD CD是指持续交付和/或持续部署, ...
- Jenkins+Svn搭建持续集成环境和自动部署
Jenkins+Svn搭建持续集成环境和自动部署 一.环境说明 centos 6.8 ip:192.168.1.26 二.运行环境配置 1.安装java环境,下载jdk并放在/usr/loca ...
- Jenkin持续集成部署-Jenkins常用插件篇
Jenkin持续集成部署-Jenkins常用插件篇 前言 1. maven插件 2. pipeline 3. SSH 4. Docker 5. Blue Ocean 6. 自定义配置JDK 前言 本篇 ...
- jenkins+k8s实现持续集成
持续集成(CI) 集成是指开发人员将代码提交到git或svn 持续集成是指让开发人员持续提交代码,写一点就提交一点,这样就会更早的发现代码差异 每次集成,都可以通过自动化的构建来验证 自动化构建包括: ...
- Jenkins多环境持续集成架构实践
作者:滴答的雨 出处:http://www.cnblogs.com/heyuquan/ Jenkins多环境持续集成架构实践 自动化部署主要是为了解决项目多.环境多.持续集成慢.部署操作麻烦.手动操作 ...
最新文章
- BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】
- 如何在maven环境中设置JVM参数
- 《深入理解Android》一2.1 浏览器工作原理概述
- 华为 云 虚拟服务器,华为虚拟服务器设置
- rails 5 action cable 服务器部署
- hbuilder 个推登记应用
- 【VB.NET】测验题目Quiz2
- 12、SpringBoot------activeMq的简单使用
- osea/Beat Classification 4.0-4.2
- 【数据结构】--章节2.2----线性表的顺序表示和实现
- linux中生成考核用的NTFS文件系统结构样例(一)
- android查看native日志,Android 日志管理框架 NativeLogger
- 【机器学习】机器学习数据集大全
- MySql 大数据查询优化方案和超大分页的处理方法
- 神经网络未来发展趋势,神经网络未来发展前景
- linux 下打包可执行程序
- 漫画:设计模式六大原则(上)
- 微信官方支付接口配置教程
- LeetCode/LintCode 题解丨一周爆刷字符串:神奇字符串
- MySQL 的查询优化