前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >什么是 CI/CD?

什么是 CI/CD?

作者头像
LinuxSuRen
修改于 2019-04-18 08:17:07
修改于 2019-04-18 08:17:07
17.5K0
举报
文章被收录于专栏:JenkinsJenkins

本文首发于:Jenkins 中文社区

CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇,

这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。

从最初的 瀑布模型

到后来的 敏捷开发

再到今天的 DevOps

这是现代开发人员构建出色产品的技术路线。

随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法,

而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里,

大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?),

而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。

SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序,

而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。

开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期,

大多数团队都有自动化流程来检查代码并部署到新环境。

我们一直在关注自动化测试流程,但这将在之后的文章中介绍。

今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。

持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次,

主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。

持续交付的目的是最小化部署或发布过程中团队固有的摩擦,

它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。

持续部署是一种更高程度的自动化,无论何时代码有较大改动,

都会自动进行构建/部署。

以上的每一个阶段都是交付流水线的一部分。

Humble 和 Ferley

在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说:

「对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。

反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。

部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时,

查看和控制每次更改的过程。」

持续集成(CI)

通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。

开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。

这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。

实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。

如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。

当然,这里也有一些权衡,这个流程不提供额外的质量保障。

事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。

为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。

然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。

CI 的目标是将集成简化成一个简单、易于重复的日常开发任务,

这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。

要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建,

并且在发现 bug 的早期积极解决。

持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。

成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。

开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。

CD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程。此流水线是一个自动化系统,

可以针对构建执行一组渐进的测试套件。CD 具有高度的自动化,并且在一些云计算环境中也易于配置。

在流水线的每个阶段,如果构建无法通过关键测试会向团队发出警报。否则,将继续进入下一个测试,

并在连续通过测试后自动进入下一个阶段。流水线的最后一个部分会将构建部署到和生产环境等效的环境中。

这是一个整体的过程,因为构建、部署和环境都是一起执行和测试的,它能让构建在实际的生产环境可部署和可验证。

AWS 上提供了可靠的当前 CI/CD 的展示,亚马逊是云计算的提供商之一,提供出色的 CI/CD 流水线环境和实验过程,

有众多开发资源可供选择,您可以将它们在一个易于配置和监控的流水线中组合起来。

许多人认为持续交付的吸引力主要在于,它自动化了从提交代码到仓库,再到测试和发布产品过程的所有步骤。

这是构建和测试过程细致的自动化,但是如何发布以及发布什么仍然是需要人工操作,持续部署可以改变这一点。

持续部署(CD)

持续部署扩展了持续交付,以便软件构建在通过所有测试时自动部署。在这样的流程中,

不需要人为决定何时及如何投入生产环境。CI/CD 系统的最后一步将在构建后的组件/包退出流水线时自动部署。

此类自动部署可以配置为快速向客户分发组件、功能模块或修复补丁,并准确说明当前提供的内容。

采用持续部署的组织可以将新功能快速传递给用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷。

用户对无用或者误解需求的功能的快速反馈有助于团队规划投入,避免将精力集中于不容易产生回报的地方。

随着 DevOps 的发展,新的用来实现 CI/CD 流水线的自动化工具也在不断涌现。这些工具通常能与各种开发工具配合,

包括像 GitHub 这样的代码仓库和 Jira 这样的 bug 跟踪工具。此外,随着 SaaS 这种交付方式变得更受欢迎,

许多工具都可以在现代开发人员运行应用程序的云环境中运行,例如 GCP 和 AWS。

最受欢迎的自动化工具是 Jenkins(以前的 Hudson),

这是一个由数百名贡献者和商业公司 Cloudbees 支持的开源项目。

Cloudbees 甚至聘请了 Jenkins 的创始人,并提供了一些 Jenkins 培训项目和附加组件。

除了开源项目之外,还有一些更现代化的商业产品例如 CircleCI,Codeship 和 Shippable。

这些产品各有优缺点,我鼓励开发人员在开发流程中一一尝试它们,以了解它们在您的环境中的工作方式,

以及它们如何与您的工具、云平台、容器系统等协作。

在 mabl 中,我们在 Google Cloud Platform 上进行构建

因此,我们正在寻找与 GSP 兼容或者最好是已经集成进 GSO 的产品。我们尝试过 CircleCI,Codeship 和 Shippable,

下面有一个简单的表格,展示了每个工具的一些细节:

我们最终选择了 Codeship,我认为我们的选择是正确的,

也感谢 Codeship 团队的支持。

接下来?

一旦部署了现代化的 CI/CD 流水线,您可能会意识到开发人员工作流程中的一些工具和流程也需要进行现代化改造。

测试是一个要着重关注的领域,如果您的部署频率是每天或者一天多次,您的每次测试可能需要数小时甚至一晚上才能完成。

mabl 正在使用机器学习解决这个问题。

Jenkins 官方微信公众号
Jenkins 官方微信公众号

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android Studio导入github项目详解
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48789705
Hankkin
2018/09/06
7K0
Android Studio导入github项目详解
Android Studio 遇到问题集锦
Android Studio First Run 检测 Android SDK 及更新,由于众所周知的原因,我们会「Unable to access Android SDK add-on list」,而且大家一般也已经提前配置好了 Android SDK,真正需要更新的时候手动去 SDK Manager 更新就好了。
mzlogin
2020/04/16
6.8K0
Android Studio 遇到问题集锦
Android开发(第一行代码 第二版) 常见异常和解决办法(基于Android Studio)(一)
Android Studio是Android开发的最理想工具,但是由于版本的更新和配置的差异,会出现很多问题,下面是常遇见的一些问题的总结。
cutercorley
2020/07/23
2.7K0
Android开发(第一行代码 第二版) 常见异常和解决办法(基于Android Studio)(一)
开发工具总结(2)之全面总结Android Studio2.X的填坑指南
前言:好多 Android 开发者都在说Android Studio太坑了,老是出错,导致开发进度变慢,出错了又不知道怎么办,网上去查各种解决方案五花八门,有些可以解决问题,有些就是转来转去的写的很粗糙,让人看了云里雾里。我就很不爽这种做法,要么就不写,要写就写出让人一目了然的东西,所以在这里我就详细了总结了一下Android Studio2.X的那些坑。
AWeiLoveAndroid
2018/09/03
1.8K0
开发工具总结(2)之全面总结Android Studio2.X的填坑指南
Android Studio安装、配置史上最全图解
(这里提示sdk目录里面已经有内容了,因为我们已经下载了相应版本的sdk了,不用管)
程序员飞飞
2020/02/27
3.4K0
Android Studio安装、配置史上最全图解
导入机智云Android开源项目的正确姿势
前言 在前面的Arduino连接机智云物联网平台的项目中,我们使用的是官方的APP来控制小灯亮灭。然而机智云平台支持项目自生成APP源码,因此只要我们将源码工程文件成功导入Android Studio
小雨coding
2020/06/09
1.1K0
导入机智云Android开源项目的正确姿势
读书笔记--Android Gradle权威指南(上)前言笔记
最近看了一本书《Android Gradle 权威指南》,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所以打算写一篇读书笔记,将书中一些我个人觉得蛮有用的点记录、总结一下。 前言 首先,先来过一下整书的目录章节,先大概清楚整本书都介绍了哪些知识点: 第 1 章 Gradle 入门 第 2 章 Groovy 基础 第 3 章 Gradle 构建脚本基础 第 4 章 Gradle 任务 第 5 章 Gradle 插件 第 6 章 Ja
请叫我大苏
2018/06/19
1.2K0
Android Studio Gradle问题集合
1.开发环境:android studio,项目gradle文件添加ndk代码后配置构建出现问题 externalNativeBuild{ ndkBuild{ path "$projectDir/jni/Android.mk" } } 问题:Could not find method externalNativeBuild() for arguments 解决方案:gradle is set to at least version 2.2.0:,gradle版本最低需要2.2
用户1148881
2018/01/15
1.6K0
Android Studio Gradle问题集合
052AndroidStudio导入项目一直卡在Building gradle project info最快速解决方案
AndroidStudio导入项目一直卡在Building gradle project info,实际上是因为导入的项目使用的gradle与已经拥有的gradle版本不一致,导致需要下载该项目需要的gradle版本,不知是被墙了还是什么原因,反正就是会一直卡住,直至下载完成
上善若水.夏
2018/09/28
4390
从零开始用android studio
我这篇博客写的有点迟了,很多原因 ,不一一说明了,而且网上也有很多介绍这个android 开发神器的文章,很多我在碰到问题的时候也都一一看过,但是我还是想写一篇总
再见孙悟空_
2023/02/10
1.1K0
从零开始用android studio
Android Studio Gradle文件解释其作用
在使用AndroidStudio时通常会遇到如下问题: 1. Android sutdio打开一个工程一直卡在Background Tasks怎么办? 2. 手动配置Gradle Home后,怎么还是提示错误? 3. 下载了Gradle,配置了gradle home,为什么打开工程显示还要在远程库下载?
zhangjiqun
2024/12/16
1120
Android Studio Gradle文件解释其作用
Android Gradle 入门
Gradle是一款非常优秀的构建系统工具,它的DSL基于Groovy实现,可以让你很方便的通过代码控制这些DSL来达到你构建的目的,其构建的大部分功能都是通过插件的方式来实现,所以非常灵活方便,如果内置插件不能满足你的需求你可以自定义自己的插件。
飞雪无情
2018/08/28
9050
Android Studio之gradle的配置与介绍
Android Studio之gradle的配置与介绍 非著名程序员 1、gradle的简单介绍 Gradle是可以用于Android开发的新一代的Build System,也是Android Studio默认的build工具。其实Gradle脚本是基于一种JVM语言— Groovy,再加上DSL组成的。由于Groovy是JVM语言,所以可以使用大部分的Java语言库。所谓DSL就是专门针对Android开发的插件,比如标准Gradle之外的一些新的方法(Method)、闭包(Closure)等等。通过我们
非著名程序员
2018/02/01
1.9K0
【Android应用开发】Android Studio 错误集锦 -- 将所有的 AS 错误集合到本文
-- 出错原因 : 使用 ToolBar 后, 原有的 ActionBar 没有取消, 两个导航栏都出现就出现了上述错误;
韩曙亮
2023/03/27
1.6K0
【Android应用开发】Android Studio 错误集锦 -- 将所有的 AS 错误集合到本文
Android Studio Arctic Fox | 2020.3.1、Gradle 7.0升级记录
或是mac下,打开访达,然后打开user目录,command+shift+.显示隐藏文件夹,找到.bash_profile文件,查看或配置java环境
yechaoa
2022/06/10
1.3K0
Android Studio Arctic Fox | 2020.3.1、Gradle 7.0升级记录
推荐阅读
相关推荐
Android Studio导入github项目详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文