CI/CD 工具比较:Jenkins、GitLab CI、Buildbot、Drone 和 Concourse

介绍

持续集成、交付和部署是旨在帮助增加开发速度并发布经过充分测试的可用产品的策略。持续集成鼓励开发团队尽早测试和集成其对共享代码库的更改,以最小化集成冲突。持续交付建立在此基础上,通过消除部署或发布过程中的障碍。持续部署则进一步通过自动部署通过测试套件的每个构建。

虽然上述术语主要涉及策略和实践,但软件工具在帮助组织实现这些目标方面起着重要作用。CI/CD 软件可以帮助团队自动推进新变更通过一系列阶段,以减少反馈时间并消除流程中的摩擦。

在本指南中,我们将比较一些流行的免费开源持续集成、交付和部署服务器,旨在使协作软件开发更加简单。我们将看看 Jenkins、GitLab CI、Buildbot、Drone 和 Concourse。

Jenkins

Jenkins 是最早的开源持续集成服务器之一,至今仍是最常用的选项。最初是 Hudson 项目的一部分,但在甲骨文收购 Sun 微系统后,由于商标冲突,社区和代码库分裂。Hudson 最早发布于 2005 年,而 Jenkins 的第一个版本发布于 2011 年。

多年来,Jenkins 已经发展成为一个强大而灵活的自动化软件任务系统。Jenkins 本身主要作为一个自动化框架,其中许多重要逻辑是通过一系列插件库实现的。从监听 Web 钩子或监视存储库到构建环境和语言支持,都由插件处理。虽然这提供了很大的灵活性,但你的 CI 过程可能会依赖于许多第三方插件,这可能会很脆弱。

Jenkins 的流水线工作流程——也是通过插件提供的——是一个相对较新的添加,自 2016 年起可用。CI 过程可以使用 Groovy 语言在存储库内的文件中或通过 Jenkins Web UI 中的文本框以声明性或命令式的方式来定义。Jenkins 的一个常见批评是基于插件的配置模型和在存储库之外定义流水线或构建过程的能力有时会使得在不同的 Jenkins 实例上轻松复制配置变得困难。

Jenkins 是用 Java 编写的,并在 MIT 许可下发布。请参阅我们的指南,了解如何在 Ubuntu 16.04 上安装 Jenkins 以为项目配置 Jenkins 服务器。

GitLab CI

GitLab CI 是内置于 GitLab 中的持续集成工具,GitLab 是一个 Git 存储库托管和开发工具平台。最初作为独立项目发布,GitLab CI 在 2015 年 9 月的 GitLab 8.0 版本中与主要 GitLab 软件集成。

GitLab CI 中的 CI/CD 过程是在代码存储库中使用 YAML 配置语法定义的。然后,工作被分派到称为 runner 的机器上,这些机器易于设置,并且可以在许多不同的操作系统上进行配置。在配置 runner 时,你可以选择不同的执行器,如 Docker、shell、VirtualBox 或 Kubernetes,以确定如何执行任务。

GitLab CI 与 GitLab 存储库平台的紧密耦合对软件的使用方式有明显的影响。GitLab CI 对于使用其他存储库托管平台的开发人员来说不是一个选择。积极的一面是,集成功能允许 GitLab 用户设置 CI/CD 环境,而无需安装和学习额外的工具。通过在 Web 界面中启用一些选项、注册 runner 机器并将管道定义文件添加到存储库中,自动化测试可以开始。紧密的关系还允许你在项目之间共享 runner,自动查看存储库中的当前构建状态,并将构建产物与生成它们的代码一起保存。

GitLab 和 GitLab CI 是用 Ruby 和 Go 编写的,并在 MIT 许可下发布。你可以参考我们的指南,了解如何使用 GitLab CI 设置持续集成管道,以了解如何在 GitLab 服务器上配置此功能。

Buildbot

Buildbot 是一个提供巨大灵活性的持续集成框架。最早于 2003 年发布,作为 Mozilla 的 Tinderbox 项目的替代方案,Buildbot 主要设计为自动化跨多种平台的构建测试。

Buildbot 使用 GPL 许可发布,并使用 Python 和 Twisted 库编写。与为了简化配置而将底层语言抽象化不同,Buildbot 的配置完全使用 Python 编写。这意味着配置往往比其他系统复杂得多,但管理员有更多的空间来设计他们理想的工作流程和流程。构建的每个阶段都清晰分离且可编程。Buildbot 定位自己为一个具有构建自定义流程工具的框架,类似于 Web 框架允许你构建自定义站点。

Buildbot 作为构建测试平台的历史意味着它支持许多不同的操作系统和版本控制系统。同样,由于它是为开源测试而设计的,其架构允许用户轻松地向项目提交其首选平台的 worker 以扩展可用的测试基础。用户只需在系统上安装一些 Python 包,然后提供项目的凭据即可。

要开始使用 Buildbot 自动化构建流程,请参考我们的指南,了解如何在 Ubuntu 16.04 上安装 Buildbot。

Drone

Drone 是一个采用容器优先架构构建的现代化 CI/CD 平台。虽然上述讨论的工具都包括使用 Docker 运行构建的选项,但基于容器的工作流程是 Drone 设计的核心。Drone 使用 Go 语言编写,于 2014 年首次以 Apache 许可证发布。

Drone 充当 Docker 和存储库提供程序之间的中间协调层。与启动 CI/CD 服务器然后再连接到版本控制系统托管服务不同,Drone 需要提前获取存储库帐户信息以启动自己的身份验证、用户和权限模型。与其所有的 CI 过程一样,Drone 本身作为一个容器运行。它支持多个数据库后端和存储库提供程序,并具有内置支持使用 Let’s Encrypt 设置传输加密的 TLS/SSL 证书。

Drone 在存储库中寻找特殊的 YAML 文件以定义流水线。该语法旨在易于阅读和表达,以便存储库中的任何人都能理解持续集成过程。Drone 提供了一个插件系统,但它与 Jenkins 中的插件使用方式不同。在 Drone 中,插件是特殊的 Docker 容器,用于将预配置的任务添加到常规工作流程中。这使得通过使用一些参数调用插件而不是手动编写整个过程来完成常见任务变得更容易。在这个意义上,Drone 插件有些类似于设计用于很好地执行一个狭窄焦点任务的 Unix 实用程序命令。

要了解如何设置 Drone 服务器以自动测试您的提交,请参阅我们的在 Ubuntu 16.04 上安装和配置 Drone 的指南。

Concourse

Concourse 是一个相对较新的持续集成平台,最初于 2014 年发布。Concourse 在 CI/CD 领域的方法与我们之前看过的其他工具有很大不同,它试图尽可能地将自身排除在外,最小化状态并将每个外部因素抽象成它称为“资源”的东西。这一哲学的目标是使集成服务器完全可丢弃,以便相同的流程可以轻松地在任何 Concourse 服务器上运行。

持续集成过程的每个部分都是由模拟系统的基本原语组成的。流程的每个部分都明确定义了其依赖关系。例如,第一个任务可能需要 VCS 存储库的最新提交,而流程的后续部分可能需要最新的通过了前几个阶段的提交。通过映射每个步骤的确切依赖关系来构建流水线的这种方法导致了严格定义的行为。

为了进一步从流程中去除偶发状态,Concourse 不会在作业之间隐式传递任何内容,也不提供任何内部方式来存储构建产物。下一个阶段所需的所有信息必须明确定义,并且可能被推送到外部存储以被拉入下一个步骤。通过要求明确定义,Concourse 希望最小化系统必须考虑的假设和未知变量的数量。

Concourse 使用 Go 语言编写,并在 Apache 许可证下发布。如果您想了解如何设置 Concourse 服务器以自动化您的持续集成流程,请查看我们的在 Ubuntu 16.04 上安装 Concourse CI 的指南。

结论

持续集成、交付和部署软件是复杂的自动化系统,旨在使您的流程可靠且可重复。从上述描述中可以看出,关于如何最好地完成自动化测试和发布有许多不同的想法,重点放在方程式的不同部分。没有单一的工具能满足每个项目的需求,但是有这么多高质量的开源解决方案可用,您很有可能能够找到满足团队需求的系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CH582F核心板入门:RGB灯点亮与蓝牙上报功能实战

文章目录 一、前言二、硬件1.原理图2.实物图3.实物连接图 三、软件1.初始化2.显示部分3.输出部分(打印和蓝牙上报)4.结果4.1 打印结果4.2 蓝牙上报4.2.1 打开手机蓝牙调试助手,找到ble_test_XXXX4.2.2 点击CONNECT4.2.3 找到Unknown Service服…

STM32(15)USART编程

使用USART实现STM32与电脑之间的通信 中介:USB转TTL模块 闭合总开关,外部时钟才会传输到分频器 c8t6手册里面写了,usart最大支持4.5MHz,所以选10 重映射时记得开启AFIO的时钟

python网络爬虫教程笔记(1)

系列文章目录 文章目录 系列文章目录前言一、爬虫入门1.爬虫是什么?2.爬虫工作原理3.爬虫基本原理4.工作流程5.HTTP请求6.HTTP响应7.HTTP原理:证书传递、验证和数据加密、解密过程解析8.Urllib.request库的使用9.TCP3次握手,4次挥手过程 总结…

PCB电路中每个层是什么?有什么作用

在电子工程领域中,印刷电路板(PCB)是不可或缺的组件,它承载着电子元件之间的连接与通信,而PCB并非单层结构,是由多个层次构成,每层都有其特定的功能和作用,下面我们一起来聊聊。 1、…

计算机网络实验一 网线制作

实验目的与要求: 实验目的 了解以太网网线(双绞线)和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤: 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…

基于 Vue3打造前台+中台通用提效解决方案(下)

47、通用组件 - 倒计时组件 特惠部分存在一个倒计时的功能,所以我们需要先处理对应的倒计时模块,并把它处理成一个通用组件。 那么对于倒计时模块我们又应该如何进行处理呢? 所谓倒计时,其实更多的是一个时间的处理,那么对于时间的处理,此时我们就需要使用到一个第三方…

libigl 网格平均曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 根据 Laplace-Beltrami 算子与平均曲率法向的关系: 又根据余切 Laplace-Beltrami 算子的定义: 其中 Ai 为该点邻域面积,取 Voronoi cell 面积如下: 得到

蓝桥杯第2章_基础算法4

2.小浩的ABC - 蓝桥云课 (lanqiao.cn) #include<bits/stdc.h> using namespace std; const int N1e6; int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;while(n--){long long x;cin>>x;if(x1)cout<<-1<<\n;else if(x-…

spark 报错总结

&#xff08;一&#xff09; spark 报错&#xff1a;spark SparkSession.builder() TypeError: Builder object is not callable 解决办法&#xff1a;.builder() 改为 .builder spark SparkSession.builder() 改为 spark SparkSession.builder

uniapp制作--简单的tab切换

一、实现思路 在UniApp中&#xff0c;可以使用v-if来控制Tab栏并进行切换。 创建一个方法来控制点击时的效果。 二、实现步骤 ①view部分展示 <!-- tab选项 --><view class"select-area"><view class"select-top"><view clas…

Learning and Leveraging World Models in Visual Representation Learning

Learning and Leveraging World Models in Visual Representation Learning 相关链接&#xff1a;arxiv 关键字&#xff1a;学习世界模型、视觉表示学习、自监督学习、JEPA、Image World Models 摘要 本文探索了在自监督视觉表示学习中学习和利用世界模型的方法。作者引入了图…

基于Python+Flask实现一个TODO任务管理系统网站

随着科技的进步&#xff0c;数字化的任务清单逐渐成为生活中不可或缺的一部分。它们不仅可以帮助我们跟踪日常任务&#xff0c;还可以提高效率。但是&#xff0c;你是否考虑过自己制作一个任务管理系统呢&#xff1f; 好消息是&#xff0c;使用Python和Flask&#xff0c;我们可…

Redis 之六:Redis 的哨兵模式(Sentinel)

Redis 哨兵&#xff08;Sentinel&#xff09;模式是一种高可用性解决方案&#xff0c;用于监控和自动故障转移的集群系统。 在 Redis Sentinel 架构中&#xff0c;哨兵是一组运行在特殊模式下的 Redis 进程&#xff0c;它们可以监控一个或多个主从复制结构中的 Redis 主服务器以…

小脑萎缩患者必备营养指南

亲爱的读者朋友们&#xff0c;您是否了解小脑萎缩这一疾病&#xff1f;这是一种逐渐发展的神经退行性疾病&#xff0c;对患者的生活质量影响重大。面对这样的挑战&#xff0c;除了必要的医疗干预外&#xff0c;日常饮食和营养管理也扮演着至关重要的角色。今天&#xff0c;让我…

Excel中筛选合并单元格后,只显示第一行怎么办?

Excel中筛选合并单元格后,只显示第一行怎么办? 我们日常的Excel数据在展示的时候为了数据的清晰和美观往往部分相同的单元格进行合并,但是合并之后在筛选时会发现结果会显示异常。 现在我们筛选下国籍为中国的员工信息,发现只显示了一条数据,解决这个异常只需要五Excel步:…

06-prometheus的数据存储

一、本地存储prometheus收集的监控数据 就是将默认的存储&#xff0c;修改为“我们指定”的目录下&#xff1b; 1&#xff0c;配置systemctl启动文件 [rootprometheus-server32 ~]# vim /etc/systemd/system/prometheus-server.service [Unit] DescriptionPrometheus Server D…

站群服务器租用需要考虑哪些?

站群服务器租用是指租用服务器来托管多个网站或应用&#xff0c;通常用于实现网站优化、提高搜索引擎排名等目的。在选择站群服务器租用服务时可以考虑以下几点&#xff0c;RAKsmart小编为您整理发布。 1. 多IP支持&#xff1a;站群服务器应具备多个独立IP地址&#xff0c;以便…

NERF论文笔记(1/2)

NeRF:Representing Scene as Neural Radiance Fields for View Synthesis 笔记 摘要 实现了一个任意视角视图生成算法&#xff1a;输入稀疏的场景图像&#xff0c;通过优化连续的Volumetric场景函数实现&#xff1b;用全连接深度网络表达场景&#xff0c;输入是一个连续的5维…

[Android] MediaPlayer SDK API glance

参考&#xff1a; https://developer.android.com/reference/android/media/MediaPlayer 概述&#xff1a; 音视频的 playback。创建 MediaPlayer 的线程必须和调用 SDK 接口的线程是同一个。注册 callback 给 MediaPlayer SDK 的 thread 必须自带一个 running Looper&#x…