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 等。