CI/CD产品选型调研 - 详解

news/2025/11/10 20:34:27/文章来源:https://www.cnblogs.com/gccbuaa/p/19208131

CI/CD产品选型调研

为什么需要 CI/CD?

调研考虑

  • 易于安装
  • 易于使用
  • 使用普遍性
  • 维护难易程度
  • 部署方式(本地、docker、k8s)
  • gitlab支持
  • 开源免费

Jenkins

GitHub star数23.3k 地址:https://github.com/jenkinsci/jenkins

Jenkins 是领先的开源自动化服务器。它使用 Java 构建,提供了 1,800 多个插件来支持几乎任何事情的自动化,帮助人类把时间用在机器无法做的事情上。

使用情况

Jenkins 被数百万用户和数千家公司使用,包括facebook、Netflix、twitch、ebay、京东等。

关键特性

基本流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

jenkins优势

jenkins 劣势

  • 软件开发较早,在使用功能的时候,必须依赖一些附加的组件和插件。
  • 在对jenkins进行管理的时候,必须对各个插件的配置方法及使用深入了解,甚至为了正常运行jenkins,编写大量的CI代码。
  • 当构建一个更复杂的管道时,势必会有更多的步骤,使用更多的工具,需要更多的容器,项目变得复杂且难以维护。
  • 项目隔离和权限分配方案存在缺陷。

GitLab CI/CD

GitHub star数23.8k 地址:https://github.com/gitlabhq/gitlabhq

GitLab CI/CD(持续集成/持续交付)是 GitLab 提供的一套集成开发工具,用于自动化构建、测试和部署应用程序。它提供了一个强大的持续集成和持续交付平台,可以帮助开发团队更高效地管理和交付软件。

使用情况

暂时没有获取到多少公司在用,只查询到GitLab CI/CD 被列为市场上最受欢迎的CI/CD解决方案之一。

基本架构

将代码托管在git存储库中,在项目的根目录创建ci文件.gitlab-ci.yml,在文件中指定构建,测试和部署脚本。gitlab将检测到.gitlab-ci.yml,使用gitlab runner执行脚本,脚本被分组为作业,它们共同组成了一个管道。运行作业完成后返回gitlab。runner类似于jenkins的agent,go语言编写,可以根据需要配置任意数量的runner。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

.gitlab-ci.yml流行线的脚本

stages:          # List of stages for jobs, and their order of execution- build- test- deploy
build-job:       # This job runs in the build stage, which runs first.stage: buildtags:- buildonly:- mainscript:- echo "Compiling the code..."- echo "Compile complete."
unit-test-job:   # This job runs in the test stage.stage: test    # It only starts when the job in the build stage completes successfully.tags:- testscript:- echo "Running unit tests... This will take about 60 seconds."- sleep 60- echo "Code coverage is 90%"
lint-test-job:   # This job also runs in the test stage.stage: test    # It can run at the same time as unit-test-job (in parallel).tags:- testscript:- echo "Linting code... This will take about 10 seconds."- sleep 10- echo "No lint issues found."
deploy-job:      # This job runs in the deploy stage.stage: deploy  # It only runs when *both* jobs in the test stage complete successfully.environment: productiontags:- buildonly:- mainscript:- echo "Deploying application..."- echo "Application successfully deployed."

GitLab CI/CD主要特点和功能

  • 自动化构建和测试:GitLab CI/CD 允许您在代码提交到 GitLab 仓库时自动运行构建和测试作业。您可以定义多个作业,并在每个作业中编写自定义的构建和测试脚本。
  • 并行执行:GitLab CI/CD 支持并行执行作业,从而加快构建和测试的速度。您可以根据需要在不同的作业中并行执行任务,提高整体的开发效率。
  • 多阶段流水线:GitLab CI/CD 使用阶段(stages)来组织作业的执行顺序。您可以定义多个阶段,并在每个阶段中运行一系列的作业。这使得您可以按照特定的流程对代码进行构建、测试和部署。
  • 集成容器技术:GitLab CI/CD 集成了容器技术,如 Docker,使得构建和测试环境的配置更加灵活和可重复。您可以使用 Docker 容器来创建一致的开发和测试环境,确保代码在不同的环境中具有一致的行为。
  • 持续交付和部署:GitLab CI/CD 支持持续交付和部署。您可以配置自动化的部署流程,将经过测试的代码自动部署到生产环境或其他目标环境中,从而实现快速、可靠的软件交付。
  • 可视化界面和报告:GitLab CI/CD 提供了直观的用户界面,用于监视和管理构建和部署流水线。您可以查看作业的执行状态、日志输出以及生成的报告,以便更好地了解整个 CI/CD 流程的状态和结果。
  • 可扩展性和定制性:GitLab CI/CD 是高度可扩展和可定制的。您可以根据项目的需求配置各种不同的构建、测试和部署策略。它还支持与其他工具和服务的集成,如监控系统、通知系统等。

优势

劣势

  • 代码托管在gitlab的存储库才能使用gitlab ci/cd

Drone

GitHub star数32.3k 地址https://github.com/harness/harness

Drone 是一个基于Docker容器技术的可扩展的持续集成引擎,用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件,将代码推送到 git 仓库,Drone就能够自动化的进行编译、测试、发布。可以与Docker完美集成。

img

使用情况

暂无

主要特点

基本架构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Server(服务器) 主要负责管理和展示, Runner(执行器) 主要负责执行操作。Server服务,它是一个守护进程应用并且拥有Web管理界面。它通过Webhook对接Git Server。解析Git Repository根目录下的.drone.yml文件,并以轮询的形态查找需要执行的Pipelines,路由并管理Runners。Runner(执行器) 是真正执行持续部署操作服务

.drone.yml 示例

kind: pipeline
type: docker
name: default
steps:# 第一个并行执行的步骤- name: test-1image: golang:latestcommands:- go version- go test ./...# 第二个并行执行的步骤- name: test-2image: node:latestcommands:- node --version- npm install- npm test
# 定义并行化的逻辑
# group 是用来定义并行执行的步骤组
group:- test-1- test-2

type支持:docker、k8s、exec、ssh、aws、 MacStadium

Drone的优势

  • 和 Jenkins 相比, Drone 镜像小,设置迅速,从应用本身的安装部署到流水线的构建都简洁的多。由于是和源码管理系统相集成,所以 Drone 天生就省去了各种账户权限的配置,直接与 gitlab 、 github 、 Bitbucket 这样的源码管理系统操作源代码的权限一致。

  • Drone 与流行的源代码管理提供商无缝集成,支持github、gitlab、gogs、gitea、gitee、bitbucket server/cloud, 这是使用Drone的第一印象,可以实行快速打造GitOps场景。

  • 流水线插件是执行预定义任务的 Docker 容器,通过将它们配置为Pipeline中的步骤。插件可用于部署代码、发布工件、发送通知等。

  • 没有明显的缺点,官方文档和示例解释的不太清晰

Argo Workflows

GitHub star数15.1k 地址:https://github.com/argoproj/argo-workflows

专为实现 Kubernetes(以下简称 K8s) 环境下的并行作业编排与管理而设计。它允许用户通过声明式的方式来定义工作流程,这些流程不仅包括简单的顺序执行任务(步骤工作流),还能支持复杂的并行处理和条件分支逻辑(DAG 工作流)。借助 K8s 的资源管理机制,Argo 将工作流程的每个步骤作为独立的 Pod 进行调度和执行,确保与 K8s 生态系统的深度集成,并展现出卓越的可扩展性。

应用场景

Argo Workflows 可用于各种场景,如持续集成/持续交付(CI/CD)、机器学习模型训练、数据处理等。

使用情况

包括Alibaba Cloud、Adobe、Cisco、RedHat、Zhihu等200多家公司使用该产品。

关键特性

  • 声明式工作流:Argo 使用声明式 YAML 文件来定义工作流程,这使得工作流程的定义、版本控制和复用变得极其简单。

  • 可扩展性:通过自定义资源定义(CRDs),Argo 可以轻松扩展以支持新的工作流步骤类型。

  • 并行执行:Argo 支持并行执行工作流步骤,这可以显著提高工作流的效率。

  • 条件逻辑:工作流可以包含条件逻辑,Argo 允许根据前一步骤的结果动态选择执行路径。

  • 参数化和模板:Argo 支持参数化和模板,这使得创建可重用的工作流程变得更加容易。

  • 持久化卷和输出参数:工作流步骤之间可以通过持久化卷和输出参数进行数据交换。

  • 监控和日志记录:Argo 提供了对工作流执行的监控和日志记录功能,使用户能够跟踪工作流的进度和状态。

workflow的一个yaml文件

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:generateName: hello-world-  # Name of this Workflow
spec:entrypoint: hello-world     # Defines "hello-world" as the "main" templatetemplates:- name: hello-world         # Defines the "hello-world" templatecontainer:image: busyboxcommand: [echo]args: ["hello world"]   # This template runs "echo" in the "busybox" image with arguments "hello world"

总体架构

img

其中:

  • Argo CLI:命令行工具,可以更加简洁方便地对 Workflow 实例进行创建、查看、删除等操作。

  • Argo UI:提供 Web GUI 页面工具及一些运维工具,以可视化的方式观测 Workflow 实例的运行动态。

  • Workflow Controller:Workflow 调度与生命周期管理控制器,负责监视 Workflow CR 的创建、更新与删除,并控制 Workflow 实例及每个实例下节点的运行。

  • workflow step pod :对应于 steps 模板类型。在 steps 模板中,可以定义一系列顺序执行(-)或并行执行(--)的任务。每个任务可以引用一个模板或者直接定义一个内联任务。这些任务在 Kubernetes 集群上以 Pod 的形式运行,每个任务对应一个 Pod。因此,workflow step pod 是执行单个步骤任务的 Pod。

  • workflow dag pod :对应于 dag 模板类型。DAG(有向无环图)模板允许用户将任务定义为带依赖的有向无环图。在 DAG 中,任务之间的依赖关系通过 dependencies 字段设置,指定在特定任务开始之前必须完成的其他任务。workflow dag pod 是执行 DAG 模板中定义的任务的 Pod,这些任务可以有依赖关系,并且可以并行或顺序执行,取决于定义的依赖关系

整体对比

CI/CD工具优势劣势
Jenkins社区活跃、高度灵活、社区强大、成熟稳定插件依赖性强、学习成本高、性能要求高
Gitlab CI/CD原生集成、易于使用、功能全面强依赖gitlab、扩展性有限、社区版局限
Drone原生docker支持、轻量级、配置简单、插件支持有限、功能局限
Argo Workflow原生支持K8S、安装简单、轻量级、不适合非k8s环境、学习成本高、生态较小

其他产品

  • circleci(很难在本地部署,不支持在 K8s 中部署)
  • Travis CI(本地部署选项有限)
  • Buddy(收费)
  • Semaphore、Nevercode(不开源,不支持本地部署)

调研结论

根据对比jenkins、gitlab CI/CD、Drone、Argo workflow、Circle CI、Travic CI等多种产品的优势劣势,如jenkins是目前适用范围最广,最成熟的产品,但是其太过庞大,插件依赖性太强,需要对多种插件进行深入学习了解,另外如drone和argo两款产品原生支持docker和k8s,但是社区生态较新,使用度略显不足,在进行CI/CD过程中出现未知问题的解决方法不够成熟。综合是否开源、是否开源免费、是否普及、是否支持gitlab、是否便于安装维护等多个维度,考虑目前团队的使用情况及需求,认为还是基于gitlab CI/CD使用较为合适。

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

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

相关文章

安装向日葵远程协助软件

安装向日葵远程协助软件1、登录网站下载统信uos版向日葵远程控制软件 地址:https://sunlogin.oray.com/download/linux?type=personal下载的deb文件可以直接运行,如果提示因安全问题无法安装时,按提示进入安全设置…

20251110 - KMP

前言 我今天生日!!! 由来 KMP 算法,是由 Knuth、Pratt 和 Morris 三位巨佬发布的一个算法。 他可以在线性(说人话就是 \(O(n + m)\) )时间复杂度内在字符串中查找子串。 思想 朴素算法: 枚举每一个元素,然后从…

个人服务器无法连接外网的设置问题(LINUX,NMCLI)

个人服务器无法连接外网的设置问题(LINUX,NMCLI)本文为和AI大模型KIMI的对话记录,仅供参考。 解决问题,个人迷你主机设置静态地址后,局域网内其他电脑能连接,但是服务器却无法上网,经过查实是网关设置的问题。…

2025年11月智能洗碗机型号推荐榜:麦浪5000plus+领衔全维度对比

把碗留给机器,把时间留给自己,正在成为30-49岁一二线城市品质家庭的共识。白天在写字楼里开完线上会议,晚上回家面对水槽里堆叠的锅碗,很多人第一反应不是“洗”,而是“能不能不洗”。这种“时间焦虑+健康顾虑”的…

CF1485F Copy or Prefix Sum 分析

题目概述 给定一个整数数组 \(b_1, b_2, \ldots, b_n\)。 如果一个整数数组 \(a_1, a_2, \ldots, a_n\) 满足对于每个 \(i\)(\(1 \leq i \leq n\)),至少满足以下两个条件之一:\(b_i = a_i\),或者 \(b_i = \sum_{j…

在电脑上操作手机,并把手机黑屏 - 昵

在电脑上看手机,同时让手机屏幕保持黑屏?完美方案在这里! 你是否也有过这样的需求?想在电脑上专心处理手机上的文档或消息,但手机的亮屏总是分散注意力。 想长时间在电脑上操作手机,又担心手机屏幕亮着耗电发热。…

2025年11月小户型油烟机型号推荐榜:五款热销机型全维度对比

把油烟机装进不足4平米的厨房,很多用户第一次发现“尺寸”比“风量”更棘手:吊柜底下露一截,炒菜时额头磕面板;风量开大,公共烟道又倒灌;拆洗一次,半瓶清洁剂下去油垢还在叶轮里。2025年住建部《住宅厨房净烟设…

教务管理系统开发博客

教务管理系统(面向对象设计)开发博客 目录一、选题与前期调查 二、系统功能设计一、选题与前期调查 想要做什么 本次开发的教务管理系统将采用面向对象设计思想,核心聚焦于「学生-班级-课程-教师-成绩」的关联管理。…

2025年11月智能油烟机型号推荐对比:五强机型性能参数全解析榜

进入2025年下半年,全国住宅竣工面积连续四个月环比回升,厨房换新需求集中释放。中国家用电器协会公开数据显示,2025年1-9月油烟机线上零售额同比增长18.7%,其中“智能风随烟动”“免拆洗”两大功能检索量占比高达6…

2025年11月大容量洗碗机型号推荐榜:市场主流机型横向对比解析

把周末留给家人而非水槽,是不少双职工与三代同堂家庭的共同心愿。中国家电协会2025年三季度报告显示,洗碗机内销额同比增百分之三十七点二,其中可容纳十六套及以上餐具的大容量段占比首次过半,成为增长主引擎。政策…

2025年11月大容量洗碗机型号评价榜:家庭聚会场景下的优选排行

2025年11月,当“谁洗碗”成为家庭聚会的最后一道难题,越来越多用户把“大容量洗碗机”列入双11后的必买清单。中国家用电器研究院《2025洗碗机行业白皮书》显示,13套以上机型销量同比增42%,其中20套段增速最快,主…

2025年11月除菌洗碗机型号对比榜:权威数据看懂五星机型差异

进入11月,北方集中供暖启动、南方湿度骤降,餐具在封闭空间内更易滋生细菌,不少家庭把“换一台真正能除菌的洗碗机”提上日程。小红书“除菌洗碗机”关键词近30天搜索量环比上升42%,京东后台咨询里“能不能灭幽门杆…

2025年11月除菌洗碗机型号推荐榜:五款高除菌率机型对比评价

进入11月,北方集中供暖启动,南方也进入湿冷模式,餐具久晾不干、橱柜返潮长霉成为家庭厨房的新痛点。越来越多用户把“除菌”列为选购洗碗机的首要指标:母婴家庭担心奶瓶死角残留病菌,三代同堂害怕幽门螺旋杆菌交叉…

如何确保安全的就是​HTTPS

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Paytium 3.0.13 WordPress插件存储型XSS漏洞分析

本文详细分析了Paytium 3.0.13 WordPress插件中存在的存储型XSS漏洞,展示了如何通过恶意注入HTML和JavaScript代码,最终实现WordPress网站完全控制的过程,并提供了相应的解决方案。Paytium 3.0.13 WordPress插件中的…

使用爬虫技术抓取网站数据的方法和工具

使用爬虫技术抓取网站数据的方法和工具 网络爬虫是一种自动化程序,用于访问和提取网站上的数据3。它可以从任何网站获取特定的或更新的数据并将其存储下来,极大地简化了手动收集数据的过程**

Spring Cloud Alibaba + SkyWalking

SkyWalking 在微服务世界里,每个服务就像一个繁忙的小摊位,服务之间的调用就像小伙伴之间传纸条。想要知道哪个摊位慢了、哪个小伙伴忙得不可开交,你就需要 SkyWalking——微服务界的“侦探大队长”,帮你全方位监控…

改题

总结10.11 B10.1110.14 C10.11 B

20232419 2025-2026-1 《网络与系统攻防技术》实验四实验报告

1.实验内容 1.1恶意代码文件类型标识、脱壳与字符串提取 1.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。 1.3分析一个自制恶意代码样本rada,并撰写报告,回答以下问…

svn提交显示is out of date

在修改一个html文件要提交的时候,显示失败,xxx is out of date 用最原始的方法:先把出问题的这个代码做个备份 然后将这个文件revert revert之后我再update一下,再把备份内容覆盖进去原文地址:https://www.cnblogs…