1. CI/CD 是什么?为什么需要 Jenkins?

_

为什么你的代码总在"最后一公里"出问题?

不知道你有没有遇到过这种情况:

凌晨两点,你刚写完一个新功能,兴冲冲 push 到仓库,想着明天上班再部署。结果早上到公司,发现测试环境打不开了——原来是同事半夜也推了代码,你们俩的改动冲突了,一合并直接 GG。

或者另一种场景:代码本地跑得好好的,一部署到服务器就各种报错。不是环境不一样,就是依赖版本冲突,要么就是配置文件忘了改。手动部署十几次,每次都要小心翼翼,生怕漏掉哪一步。

说白了,咱开发效率再高,部署这一哆嗦要是掉链子,那都是白搭。

这就是 CI/CD 要解决的本质问题。

核心概念:CI/CD 到底是啥?

持续集成(Continuous Integration,CI)

传统开发模式是这样的:每个人在各自的分支上开发,等功能差不多了,再手动合并到主分支,然后构建、测试、部署。这一合并,往往就是"灾难"的开始——冲突、bug、回归问题全冒出来了,排查起来比写代码还累。

持续集成的思路很简单:频繁合并,早发现问题

具体怎么做呢?每次你把代码 push 到仓库,CI 服务器自动触发一个构建流程:

  1. 拉取最新代码

  2. 编译构建

  3. 运行自动化测试

  4. 反馈结果

如果构建失败了,你第一时间就能知道是哪次提交引入的问题,而不是等到最后部署的时候才发现。

一句话理解:CI 就是让你的代码"时刻保持可发布状态"。

持续交付(Continuous Delivery,CD)

持续交付在 CI 的基础上更进一步,它的核心理念是:你的软件随时可以发布到生产环境

注意,这里说的是"可以"而不是"一定"。代码经过 CI 的所有检验后,会部署到一个预生产环境(Staging),人工审核后手动点击"发布"按钮,才真正上线。

好处是啥?你的发布不再是"大冒险",而是一个可控的、低风险的日常操作。

持续部署(Continuous Deployment)

这个就更激进了:代码通过所有测试后,自动部署到生产环境,不需要人工干预。

当然,不是所有团队都适合这种方式哈。像银行、医院这种系统,变更管控非常严格,可能需要多轮审批。但对于互联网产品来说,持续部署能让你快速验证想法、快速迭代。

CI/CD 流水线长啥样?

说了这么多,咱来看一个典型的 CI/CD 流水线长什么样:

代码提交 → 拉取代码 → 编译构建 → 单元测试 → 集成测试 → 构建镜像 → 部署到测试环境 → 端到端测试 → 部署到生产环境

每个环节都可能失败,一旦失败就会停止流水线,并通知相关开发者。这就是咱常说的"Fail Fast"——快速失败,快速修复。

Jenkins 在 CI/CD 中的定位

Jenkins 就是一个开源的自动化服务器,专门用来实现 CI/CD 流水线。它由 Java 编写,最初是 Hudson 项目的一个分支,2005 年分离出来独立发展,到现在已经有将近 20 年历史了。

Jenkins 的工作方式是这样的:

  1. 你配置好一个"任务"(Job/Project)

  2. 设置触发条件(比如代码提交、定时任务、手动触发)

  3. Jenkins 按照你配置的步骤执行构建流程

  4. 显示构建结果、生成报告、发送通知

它就像一个全年无休的"自动化机器人",帮你把那些重复性的构建、测试、部署工作都干了。

主流 CI/CD 工具对比

说到这儿,可能有同学会问:市面上的 CI/CD 工具那么多,Jenkins 是不是最好的选择?哈,咱来看个对比:

特性

Jenkins

GitLab CI

GitHub Actions

CircleCI

部署方式

自托管

自托管/GitLab.com

GitHub.com/自托管

云服务/自托管

插件生态

极其丰富(1800+)

一般

一般

一般

灵活性

极高

学习曲线

较陡

平缓

平缓

平缓

配置方式

UI/代码

YAML

YAML

YAML

免费程度

完全免费

免费版有限制

免费版有限制

免费版有限制

适用场景

企业级、复杂场景

GitLab 用户

GitHub 用户

敏捷团队

Jenkins 的优势

重点说说 Jenkins 为啥值得学:

1. 插件生态极其丰富

Jenkins 有超过 1800 个插件,覆盖了几乎所有你能想到的场景:Docker、Kubernetes、AWS、Azure、SonarQube、Slack 通知……基本上你需要的任何功能,都能找到现成的插件。

2. 灵活性高

Jenkins 既可以通过 Web UI 配置,也可以用代码(Pipeline)配置。它可以跑在任何机器上,可以和任何版本控制系统集成,可以部署到任何环境。这种灵活性,是很多"开箱即用"的工具比不了的。

3. 企业级支持

虽然 Jenkins 是开源的,但有很多公司提供商业支持和服务。对于企业来说,选型的时候也会考虑这一点——万一出问题,得有人能修啊。

4. 完全免费

这点很重要!Jenkins 是 Apache 2.0 许可证下的开源软件,没有任何使用限制。小团队用、大公司用,都不要钱。

Jenkins 适用场景

适合用 Jenkins 的场景:

  • 复杂的构建和部署流程

  • 需要集成多种工具和系统

  • 对定制化要求比较高

  • 企业内部部署

  • 需要精细的权限控制

不太适合 Jenkins 的场景:

  • 团队很小,流程很简单

  • 只想快速上手,不想折腾配置

  • 已经在用 GitHub/GitLab,且 CI/CD 需求不复杂

关键术语速查

咱来整理一下 Jenkins 的核心概念:

术语

解释

Job/Project

任务,一个独立的构建单元

Build

构建,一次任务执行

Pipeline

流水线,定义多步骤的构建流程

Agent/Node

代理节点,执行构建的机器

Workspace

工作空间,Agent 上存放构建文件的目录

Plugin

插件,扩展 Jenkins 功能的组件

Credential

凭证,存储密码、密钥等敏感信息

View

视图,对任务列表的筛选和分组

Folder

文件夹,组织和隔离任务

常见误区澄清

这儿有几个特别容易搞错的概念,咱来一个个掰正:

误区一:CI = 自动化测试

自动化测试是 CI 的重要组成部分,但 CI 不仅仅是测试。CI 还包括代码编译、依赖管理、环境配置、打包构建等一系列步骤。测试只是 CI 流水线中的一个环节。

误区二:CD = 自动部署

持续交付(CD)指的是"随时可以部署"的状态,但不一定要自动部署。真正的自动部署叫"持续部署",这是两个不同的概念哈。

误区三:Jenkins 只能做 Java 项目

虽然 Jenkins 是用 Java 写的,但用它构建 Python、Node.js、Go、Rust、C# 项目完全没问题。Jenkins 的 Pipeline 支持 Shell、Docker、Kubernetes 等多种执行环境,语言和框架不是限制。

小结

咱来回顾一下今天学到的:

  1. CI(持续集成):频繁合并代码到主分支,每次提交都触发自动构建,快速发现问题

  2. CD(持续交付):代码随时处于可发布状态,通过人工审核后部署

  3. 持续部署:代码通过测试后自动部署到生产环境

  4. Jenkins:开源的自动化服务器,插件丰富、灵活度高、完全免费

  5. Jenkins vs 其他工具:Jenkins 适合复杂场景和定制化需求,GitHub Actions/GitLab CI 适合简单场景

用户研究方法 2026-05-25
2. 用 Docker 搭建 Jenkins 环境 2026-05-27

评论区