首页 > 其他分享 >CI/CD学习笔记

CI/CD学习笔记

时间:2022-11-04 16:02:00浏览次数:37  
标签:集成 CI CircleCI 部署 GitLab 笔记 CD


持续集成(Continuous intergration) ,简称CI:

是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。(简单理解为你们公司每天都收集一次你们公司开发部门全部成员的代码,然后放到CI Server上自动化给你们跑一遍,如果代码有问题就会原路打回来,这样做的目的就是为了能够尽早发现错误,从而能即时在最短的时间内定位你的错误并且改正,这样的过程我们就叫持续集成CI)。

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成。

CI流程:

在 CI/CD 的语境中,每个步骤称为一个阶段,有序阶段的集合称为一个流程。下面是一个示例流程:

持续交付(Continuousdelivery),简称CD

持续交付就是讲我们的应用发布出去的过程。这个过程可以确保我们尽可能快的实现交付。这就意味着除了自动化测试,我们还需要有自动化的发布流,以及通过一个按键就可以随时随地实现应用的部署上线。通过持续交付,您可以决定每天,每周,每两周发布一次,这完全可以根据自己的业务进行设置。但是,如果您真的希望体验持续交付的优势,就需要先进行小批量发布,尽快部署到生产线,以便在出现问题时方便进行故障排除。

持续部署( Continuousdeployment简称CD

如果我们想更加深入一步的话,就是持续部署了。通过这个方式,任何修改通过了所有已有的工作流就会直接和客户见面。没有人为干预(没有一键部署按钮),只有当一个修改在工作流中构建失败才能阻止它部署到产品线。持续部署是一个很优秀的方式,可以加速与客户的反馈循环,但是会给团队带来压力,因为不再有“发布日”了。开发人员可以专注于构建软件,他们看到他们的修改在他们完成工作后几分钟就上线了。基本上,当开发人员在主分支中合并一个提交时,这个分支将被构建、测试,如果一切顺利,则部署到生产环境中。

CI/CD开发流程:编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署

CI/CD工具:

1.Jenkins:

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

Jenkins 的优点:

  • 大量插件库

  • 自托管,例如对工作空间的完全控制

  • 容易调试运行,由于对工作空间的绝对控制

  • 容易搭建节点部署代码

  • 非常灵活多样的功能

  • 支持不同的语言

  • 跨平台

  • 开源免费

Jenkins 的缺点:

  • 插件集成复杂

  • 对于比较小的项目开销比较大,因为你需要自己搭建

  • 缺少对整个 pipeline 跟踪的分析

2.Gitlab CI/CD

GitLab 是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。GitLabCI/CD 是GitLab Continuous Integration(Gitlab持续集成)的简称。GitLab 自GitLab 8.0开始提供了持续集成的功能,且对所有项目默认开启。只要在项目仓库的根目录添加.gitlab-ci.yml文件,并且配置了Runner(运行器),那么每一次push或者合并请求(Merge Request)都会触发CI Pipeline。

GitLab CI/CD 的优点:

  • 更好的 Docker 集成

  • 运行程序扩展或收缩比较简单

  • 阶段内的作业并行执行

  • 有向无环图 pipeline 的机会

  • 由于并发运行程序而非常易于扩展收缩

  • 合并请求集成

  • 容易添加作业

  • 容易处理冲突问题

  • 良好的安全和隐私政策

GitLab CI/CD 的缺点:

  • 需要为每个作业定义构建并上传 / 下载

  • 在实际合并发生之前测试合并状态是不可能的

  • 还不支持细分阶段

3.Buddy

Buddy是一个很棒的CI/CD平台,旨在为Web开发人员减少入门级的DevOps障碍。它使用来自GitHub、Bitbucket和GitLab的代码来构建、测试和部署应用程序。有超过100种可用的操作可以以各种方式配置,管道的构建就像建造一座砖砌的房子。它利用Docker容器和预安装的编程语言和框架来与DevOps一起构建、监视和通知操作。

Buddy优点:

  • 基于Docker的快速安装配置

  • 快速作为一个测试环境来定制基于Docker的镜像

  • 智能变化识别、现代缓存、并行和各种优化

  • 支持SSH、Heroku等CLI命令

  • 一流的服务和与Git的集成

  • 网站的监控

Buddy缺点:

  • 缺少适合新用户的文档

  • 太贵了

4.CircleCI

CircleCI是基于云的CI/CD工具,可自动执行软件构建和交付过程。它提供快速的配置和维护,没有任何复杂性。由于它是基于云的CI/CD工具,因此消除了专用服务器的困扰,并降低了维护本地服务器的成本。此外,基于云的服务器是可扩展的,健壮的,并有助于更快地部署应用程序。

CircleCI优点:

  • 快速启动

  • CircleCI有一个免费的企业项目计划

  • 这很容易,也很快开始

  • 轻量级,易读的YAML配置

  • 您不需要任何专用服务器来运行CircleCI

CircleCI缺点:

  • CircleCI仅支持2个版本的Ubuntu免费(12.04和14.04)和MacOS作为付费部分

  • 尽管CircleCI可以使用并运行所有语言,但tt仅支持“开箱即用”的以下编程语言:Go(Golang),Haskell,Java,PHP,Python,Ruby / Rails,Scala

  • 如果您想进行自定义,可能会出现一些问题:您可能需要一些第三方软件来进行这些调整

  • 此外,虽然作为基于云的系统是一方的优势,它也可以停止支持任何软件,你将无法阻止

工具详细对比:https://blog.csdn.net/dg313/article/details/126270138

 

标签:集成,CI,CircleCI,部署,GitLab,笔记,CD
From: https://www.cnblogs.com/cq-cjw/p/16858126.html

相关文章

  • 《信息安全与设计》第十二章学习笔记
    第十二章块设备I/O和缓冲区管理知识点归纳一、块设备I/O缓冲区(一)I/O缓冲的基本原理。文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk)标识的......
  • 学习笔记-角色权限
    角色权限用户帐户在Windowsvista或是windows7中,有两个级别的用户:标准用户和管理员.标准用户是计算机Users组的成员;管理员是计算机Administrators组的成员......
  • 学习笔记-工作组
    工作组工作组的定义工作组是局域网中的一个概念,它是最常见的资源管理模式,简单是因为默认情况下计算机都是采用工作组方式进行资源管理的。将不同的电脑按功能分别列入不......
  • 学习笔记-TLS
    TLS注:笔记中拓扑图drawio源文件在其图片目录下相关文章&参考链接https://blog.zeddyu.info/2021/04/20/tls-poison/http://blog.nsfocus.net/tls1-3protocol......
  • 学习笔记-VSFTP
    VSFTP配置案例安装服务端yuminstall-yvsftpd客户端yuminstall-yftp匿名访问参数作用anonymous_enable=YES允许匿名访问模式anon_umask......
  • 学习笔记-God-Linux
    God-Linuxbash#判断当前是否是登陆式或非登陆式shellecho$0#上一个命令的最后一个参数.例如:上一条命令(vimtest.txt),cat!$=cattest.txt!$#以......
  • 学习笔记-Secure-Linux
    Secure-LinuxLinux加固+维护+应急响应参考文档内容仅限Linux,web服务和中间件的加固内容请看加固大纲文件可疑文件文件恢复系统密码重置会话......
  • 详解随机森林-机器学习中调参的基本思想【菜菜的sklearn课堂笔记】
    视频作者:[菜菜TsaiTsai]链接:[【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili]调参的方式总是根据数据的状况而定,所以没有办法一概而论那我......
  • 学习笔记-Iptables
    Iptables什么是iptablesLinux系统在内核中提供了对报文数据包过滤和修改的官方项目名为Netfilter,它指的是Linux内核中的一个框架,它可以用于在不同阶段将某些钩子函......
  • 学习笔记-mysql
    mysqlmy.cnf配置文件port=3309socket=/usr/local/mysql/tmp/mysql.sock[mysqld]#服务器端配置!include/usr/local/mysql/etc/mysqld.......