CI/CD持续集成/持续部署 敏捷开发

敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用。

1,CI/CD持续集成/持续部署

      持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

       持续部署(continuous deployment)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率,让 engineering productivity 最大化。

   持续交付(英语:Continuous delivery,缩写为 CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

  与DevOps的关系

持续交付与DevOps的含义很相似,所以经常被混淆。但是它们是不同的两个概念。DevOps的范围更广,它以文化变迁为中心,特别是软件交付过程所涉及的多个团队之间的合作(开发、运维、QA、管理部门等),并且将软件交付的过程自动化。另壹方面,持续交付是壹种自动化交付的手段,关注点在于将不同的过程集中起来,并且更快、更频繁地执行这些过程。因此,DevOps可以是持续交付的壹个产物,持续交付直接汇入DevOps;

  与持续部署的关系

有时候,持续交付也与持续部署混淆。持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署。如果要实施持续部署,必须先实施持续交付。

1.1、enkins是什么?

Jenkins是一个可扩展的持续集成引擎。

主要用用途:

持续、自动的构建/测试软件项目。

监控一些定时执行的任务。、

特点:

易于安装,只要把jenkins.war部署到servlet容器

易于配置-所有配置都通过其提供的web界面实现。

集成RSS/E-mail通过RSS发布构建结果或当构件完成是通过e-mail通知。

生成JUnit/TestNG测试报告。

分布式构建支持Jenkins能够让多台计算机一起构建/测试。

文件识别:Jenkins能够跟踪那次构建生成哪些jar,那次构建使用哪个版本的jar

插入支持:支持扩展插件,可以开发适合自己团队的使用的工具。

Jenkins的目标是监控软件的开发流程,快速显示问题。所以能保证开发人员省事又省力提高开发效率。

2、项目版本迭代控制:、

现有的版本控制工具,如 Github、GitLab、SVN、CVS 等主流工具..

构建及测试:通过 Jenkins 实现自动构建和测试,还有商业软件BAMBOO来持续集成。这个收费的。免费就用Jenkins..

交付:以Docker镜像形式进行交付,提交至镜像仓库;

2.1 SVN服务器:

Subversion是一个版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。

Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。因为修改不再是单线进行(单线进行也就是必须一个一个进行),开发进度会进展迅速。此外,由于所有的工作都已版本化,也就不必担心由于错误的更改而影响软件质量—如果出现不正确的更改,只要撤销那一次更改操作即可。某些版本控制系统本身也是软件配置管理系统(SCM),这种系统经过精巧的设计,专门用来管理源代码树,并且具备许多与软件开发有关的特性——比如对编程语言的支持或者提供程序构建工具。不过Subversion并不是这样的系统,它是一个通用系统,可以管理任何类型的文件集。

2.2 CVS服务器:

CVS(Concurrent Versions System)版本控制系统是一种GNU软件包,主要用于在多人开发环境下源码的维护。Concurrent有并发的、协作的、一致的等含义。实际上CVS可以维护任意文档的开发和使用,例如共享文件的编辑修改,而不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS用Copy-Modify-Merge(拷贝、修改、合并)变化表支持对文件的同时访问和修改。它明确地将源文件的存储和用户的工作空间独立开来,并使其并行操作。CVS基于客户端/服务器的行为使其可容纳多个用户。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。

所有重要的免费软件项目都使用CVS作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这些项目包括GNOME、KDE、THE GIMP和Wine等。

2.3 GIt/github:

    GIT (分布式版本控制系统)

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git的读音为/gɪt/。

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 很多 Freedesktop 的项目迁移到了 Git 上。

gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。

gitHub于2008年4月10日正式上线,除了git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。

如何从零开始搭建 CI/CD 流水线

在当前 DevOps 的趋势下,持续集成(CI)和持续部署(CD)具有支柱性地位,那么能够成功搭建 CI/CD 流水线就至关重要了。我们可能会在各种角色的岗位描述中发现关于「持续集成」和「持续部署」技能的要求,比如:数据工程师、云解决方案架构师、数据科学家等。为了在开发团队和运营团队之间搭建桥梁,CI/CD 流水线实现了应用程序的自动构建、自动测试和自动部署。本文中,我们将介绍什么是 CI/CD 流水线,以及它是如何工作的。

在介绍 CI/CD 流水线的工作原理之前,我们先了解一下什么是 DevOps。

什么是 DevOps?

DevOps 是一种软件开发方法。它将持续开发、持续测试、持续集成、持续部署和持续监控贯穿于软件开发的整个生命周期。当前几乎所有的顶尖公司均采用了该方法,用以提高软件开发质量,并缩短软件开发生命周期。从而以达到每个公司对软件产品的期望,交付出客户最满意的产品。

DevOps 生命周期

要想完整的理解 DevOps,我们还需要了解一下 DevOps 的生命周期。接下来,我将通过一张图来展示 DevOps 的生命周期以及它和软件开发生命周期之间的关系。

如何从零开始搭建 CI/CD 流水线

什么是 CI/CD 流水线?

CI 代表持续集成(Continuous Integration),CD 代表持续交付(Continuous Delivery)和持续部署(Continuous Deployment)。也可以将它们看作是类似于软件开发生命周期的过程。

现在我们来看一下它是如何工作的。

如何从零开始搭建 CI/CD 流水线

如上图所示,该流水线展示了一个软件在其最终交付给客户或者投入上线之前,它在其生命周期内各个阶段中的移动过程。

接下来我们具体看一下该 CI/CD 流水线。假如我们要构建一款 Web 应用程序,并将它部署在一个现场 Web 服务器上。同时我们有一组开发人员,他们主要负责编写代码,并将代码构建为 Web 应用程序。假设现在开发团队已经将代码提交到版本控制系统(如:Git,SVN)中了。

构建阶段

接下来,代码将会经历构建阶段,这也是 CI/CD 流水线的第一阶段。在此之前,开发者已经将他们的代码加上合适的标签,并提交到版本控制系统中了。

如何从零开始搭建 CI/CD 流水线

假如我们采用的是 Java 语言,那么还需要先进行代码编译。因此,代码在通过版本控制阶段之后,会先在构建阶段予以编译。该阶段会从代码库的各个分支中获取到所有的功能代码,合并后最终通过一个编译器来编译它们。这整个过程都被称为「构建阶段」。

测试阶段

如何从零开始搭建 CI/CD 流水线

构建阶段结束后,将会继续进入到代码的「测试阶段」。在这个阶段中,我们会进行各种各样的测试,单元测试就是其中之一。在该阶段中,我们会测试代码中多个组件间的关系或者单个组件的功能,同时也会进行软件的可用性测试。

部署阶段

如何从零开始搭建 CI/CD 流水线

测试阶段完成后,就要进入「部署阶段」了。在该阶段,代码将会被部署到准生产环境服务器(staging server)或者测试环境服务器(test server)中。同时在该阶段中,我们既可以查看程序代码,也可以在模拟器中运行该应用程序。

自动测试阶段

如何从零开始搭建 CI/CD 流水线

只要我们的代码部署成功,我们就可以运行另一组可用性测试了。该阶段结束后,如果所有的测试都通过了,那么就可以将其部署到生产环境中了。

部署到生产环境

如何从零开始搭建 CI/CD 流水线

另外值得一提的是我们可能在每一个阶段的执行过程中遇到一些错误。在这种情况下,我们可以将错误邮件发回到开发团队中,以便他们能够及时修复这些错误。当开发团队修复完成后,就可以将代码重新提交到版本控制系统中,然后再次从头开始执行该流水线。

如果在执行测试的过程中遇到了任何错误,那么这些错误也将反馈给开发团队,等他们修复完成后,同样会再次触发该流水线,进行新一轮的持续迭代。

度量和验证阶段

如何从零开始搭建 CI/CD 流水线

因此,整个生命周期将会继续迭代下去,直到我们得到可以直接部署到生产环境中的代码或者产品。除此之外,在生产环境中我们还需要对代码进行度量和验证,以实时监控应用的线上运行状态。

到目前为止,我们已经了解了 CI/CD 流水线及其工作原理,接下来我们将继续介绍什么是 Jenkins ,以及如何使用 Jenkins 部署示例代码,并自动化整个过程。

终极 CI 工具 – Jenkins

我们的目标是要将软件开发生命周期的整个过程都自动化,从开发人员向代码库中提交代码开始,到将此代码投入生产环境中使用为止。

为了使整个软件开发流程处于 DevOps 模式或自动化模式,我们就需要对 CI/CD 流水线进行自动化。因此,我们还需要一款自动化工具来做这件事情,它就是 Jenkins。

如何从零开始搭建 CI/CD 流水线

Jenkins 为我们提供了各种接口和工具,用以实现软件开发整个过程的自动化。

首先,我们需要拥有一个可以供开发人员提交代码的仓库。同时,Jenkins 也提供了前端展示的页面,我们可以使用该前端页面来定义整个流水线的作业(job)和任务(task)。对于某一个应用程序而言,我们的目标就是通过特定的工具实现其持续集成和持续交付的自动化流程。

Jenkins 会从 Git 代码仓库中拉取各个分支的代码,然后将其移动到 “代码提交阶段”。拉取到各个分支的代码之后,Jenkins 就会将其继续移动到“构建阶段”,该阶段会对代码进行编译工作。如果是像 Java 这类语言的话,我们还可以在 Jenkins 中选用 maven 之类的构建工具,通过 maven 对代码进行编译。之后在部署过程中,还可以将编译好的代码进行一系列的测试,同时这些测试也会由 Jenkins 监督执行。

之后,Jenkins 就会将代码移动到准生产环境,并使用 Docker 进行部署。在准生产环境中会运行一系列单元测试和可用性测试。如果能够通过所有的测试,Jenkins 就会将它继续移动到生产环境中。

这就是 Jenkins 在持续集成和持续交付中所发挥的作用,它几乎能够自动化所有的事情。现在,我们还需要一个和生产环境一致的环境用以部署代码,它就是 Docker。

Docker

如何从零开始搭建 CI/CD 流水线

Docker 就像是一个虚拟的环境,我们可以在其中创建一个服务器。我们可能需要花费一点时间在 Docker 中部署整个服务器以及我们想要测试的工件。那么,这里我们遇到的问题就是:

我们为什么要使用 Docker 呢?

如前所述,通过 Docker 我们可以在几秒钟的时间内运行整个服务器集群。同时我们还有 Docker 镜像的注册中心,可以用来永久地存储构建出的 Docker 镜像。因此,我们在任何时候都能复制出一份 Docker 镜像并运行它。

Docker 和 Jenkins 构建 CI/CD 流水线

第 1 步:在虚拟机中打开终端。通过命令 “systemctl Start Jenkins”、“systemctl enable Jenkins” 和 “systemctl Start Docker” 来启动 Jenkins 和 Docker。

注意:如果提示 “privileges error” 错误的话,就在命令前面加上 sudo。

如何从零开始搭建 CI/CD 流水线

第 2 步:在浏览器中打开在指定端口运行的 Jenkins。通过点击 “New Item” 来创建一个 Job。

如何从零开始搭建 CI/CD 流水线

第 3 步:选择 “freestyle project” 并填写项目的名称(如下以 “Job1” 为例),并点击 OK 确认。

如何从零开始搭建 CI/CD 流水线

第 4 步:选择 “Source Code Management”(源代码管理),并提供一个 Git 仓库地址。然后再点击 “Apply” 和 “Save” 按钮确认。

如何从零开始搭建 CI/CD 流水线

第 5 步:点击 “Build” 选项,并在下面的菜单中选择 “Select Execute Shell”。

如何从零开始搭建 CI/CD 流水线

第 6 步:输入 shell 命令。如下示例脚本会构建已归档的文件,并得到 war 格式的文件。在此之后,它将会拉取最新的代码,然后,采用 maven 安装所依赖的包。因此,在这个步骤中只是简单的安装了依赖并对应用程序进行了编译。

如何从零开始搭建 CI/CD 流水线

第 7 步:通过点击 “New Item” 来创建一个新的 Job。

如何从零开始搭建 CI/CD 流水线

第 8 步:选择 “freestyle project” 并填写项目的名称(如下以 “Job2” 为例),并点击 OK 确认。

如何从零开始搭建 CI/CD 流水线

第 9 步:选择 “Source Code Management”(源代码管理),并提供一个 Git 仓库地址。然后再点击 “Apply” 和 “Save” 按钮确认。

如何从零开始搭建 CI/CD 流水线

第 10 步:点击 “Build” 选项,并在下面的菜单中选择 “Select Execute Shell”。

如何从零开始搭建 CI/CD 流水线

第 11 步:输入 shell 命令。如下示例脚本将会开始代码的集成阶段,并构建出 Docker 容器。

如何从零开始搭建 CI/CD 流水线

第 12 步:通过点击 “New Item” 来创建一个新的 Job。

如何从零开始搭建 CI/CD 流水线

第 13 步:选择 “freestyle project” 并填写项目的名称(如下以 “Job3“ 为例),并点击 OK 确认。

如何从零开始搭建 CI/CD 流水线

第 14 步:选择 “Source Code Management”(源代码管理),并提供一个 Git 仓库地址。然后再点击 “Apply” 和 “Save” 按钮确认。

如何从零开始搭建 CI/CD 流水线

第 15 步:点击 “Build” 选项,并在下面的菜单中选择 “Select Execute Shell”。

如何从零开始搭建 CI/CD 流水线

第 16 步:输入 shell 命令。如下示例将会检查 Docker 容器文件,并将它部署在 8180 端口上。点击 Save 按钮保存。

如何从零开始搭建 CI/CD 流水线

第 17 步:点击选择 Job1 ,进入 Job1 后再选择 Configure 选项。

如何从零开始搭建 CI/CD 流水线

第 18 步:点击 Post-build Actions 选项,并在下面的菜单中选择 Build other projects。

如何从零开始搭建 CI/CD 流水线

第 19 步:填写在 Job1 构建完成后需要执行的任务(如下示例中为 Job2),并点击 Save 按钮保存。

如何从零开始搭建 CI/CD 流水线

第 20 步:点击选择 Job2,进入 Job2 后再选择 Configure 选项。

如何从零开始搭建 CI/CD 流水线
如何从零开始搭建 CI/CD 流水线

第 21 步:点击 Post-build Actions 选项,并在下面的菜单中选择 Build other projects。

如何从零开始搭建 CI/CD 流水线

第 22 步:填写在 Job2 构建完成后需要执行的任务(如下示例中为 Job3),并点击 Save 按钮保存。

如何从零开始搭建 CI/CD 流水线

第 23 步:接下来我们将通过点击 “+” 号创建一个流水线视图。

如何从零开始搭建 CI/CD 流水线

第 24 步:选择 “Build Pipeline View” 并填写视图的名称(如下以 CI CD Pipeline 为例)。

如何从零开始搭建 CI/CD 流水线

第 25 步:选择 “Initial Job”(如下以 Job1 为例),并点击 OK 按钮确认。

如何从零开始搭建 CI/CD 流水线

第 26 步:点击 Run 按钮来启动 CI/CD 流水线的流程。

如何从零开始搭建 CI/CD 流水线

第 27 步:在流水线成功运行完成之后,我们可以在浏览器中打开 localhost:8180/sample.text 进行验证。此时该应用程序已处于运行状态,并且浏览器中会显示出此文本文件的具体内容。

如何从零开始搭建 CI/CD 流水线

到目前为止,我们已经学习了如何使用 Docker 和 Jenkins 来创建 CI/CD 流水线。之所以要采用 DevOps 模式,目的就是为了可以更快速更可靠的构建出高质量的软件,同时还能够加深团队之间的沟通和协作。

英文原文: https://medium.com/edureka/ci-cd-pipeline-5508227b19ca

上一篇
下一篇