1、Jenkins简介:什么是持续集成?Jenkins的起源与发展、核心功能概览、与其他CI工具对比

聊 Jenkins 之前,我们先搞清楚一个基础问题:持续集成到底在干什么?

持续集成 —— 说白了就是让代码不停“合”

持续集成,英文 Continuous Integration,简称 CI。它的核心思想很简单:开发人员频繁地将代码合并到主干,每次合并都自动构建、测试,尽早发现问题。

我刚开始带团队的时候,项目周期短、人手少,大家都是“憋大招”——写完一整个功能才合并。结果呢?合并那天就是灾难日,冲突多到怀疑人生,一测试全是红。后来我强制要求每天至少提交一次代码,CI 服务器自动跑测试,问题当天解决。团队效率反而高了。

你想想看,如果没有 CI,你可能会遇到:

  • 代码冲突积压到最后一刻才暴露
  • 某个人的修改破坏了已有功能,别人却不知道
  • 发版前才发现测试通不过,临时加班修 bug
注意:持续集成≠持续交付/持续部署。CI 只负责“集成验证”,CD 是在 CI 通过后自动把产物部署到环境。很多新人容易混淆这两个概念。

Jenkins 的前世今生

Jenkins 的前身叫 Hudson,2004 年由 Sun 公司的 Kohsuke Kawaguchi(川口耕介)开发。那时候 Java 生态里缺一个好用的 CI 工具,他干脆自己写了一个。

2011 年,Oracle 收购 Sun 后,Hudson 社区和 Oracle 之间出现了分歧。社区 fork 出了 Jenkins,从此分道扬镳。我记得当时迁移 Jenkins 的时候,插件基本能复用,代价很小。后来 Hudson 逐渐边缘化,Jenkins 成了事实标准。

发展到现在,Jenkins 经历了几个重要节点:

  • 2004-2011:Hudson 时期,奠定了插拔架构和分布式构建基础
  • 2011-2016:Jenkins 独立,插件生态爆发,支持数百种 CI/CD 场景
  • 2016-至今:Jenkins 2.0 引入 Pipeline as Code(流水线即代码),支持声明式语法和脚本式语法

说实话,在 2016 年之前我都是用 FreeStyle 项目(自由风格)配置构建,每次改构建步骤都要去 Web UI 点来点去,特别容易误操作。后来 Pipeline 出来,一个 Jenkinsfile 搞定所有逻辑,还可以放到 Git 里版本控制,简直爽到飞起。

Jenkins 核心功能一览

Jenkins 的核心能力,我用一个表格帮你梳理清楚:

功能领域 说明 我常用的场景
构建触发器 支持定时、代码变更(Webhook)、手动、上游任务触发 GitLab Webhook + Git 推送后自动构建
Pipeline 流水线 声明式 / 脚本式两种语法,定义从拉代码到部署的完整流程 声明式更易读,脚本式更灵活
分布式构建 Master 调度,Agent(节点)执行构建任务 Linux 节点构建 + Windows 节点做打包
插件生态 超过 1800 个插件,覆盖代码管理、构建工具、测试、部署、通知 我最常用的是 Git、Maven、Docker、Kubernetes、Blue Ocean
凭据管理 安全存储 SSH 密钥、、账号密码,构建时自动注入 避免在 Jenkinsfile 里写死敏感信息
个人习惯:我建议新项目从一开始就使用 Jenkins Pipeline(Jenkinsfile),而不是 FreeStyle 项目。哪怕初期只有简单的编译测试,Pipeline 也更容易扩展和维护。你想想看,以后加个代码扫描、发个通知,直接在 Jenkinsfile 里加几行就搞定,不用再去页面加步骤。

主流 CI 工具横向对比

市面上的 CI 工具很多,Jenkins 不是唯一选择。我这些年也用 GitLab CI、GitHub Actions、CircleCI 做过项目。下面是基于我的实际体验做的一个对比:

对比维度 Jenkins GitLab CI GitHub Actions CircleCI
部署方式 自托管(需自己维护服务器) 自托管或 SaaS SaaS(GitHub 官方托管) 自托管或 SaaS
可扩展性 ★★★★★ 插件数量碾压 ★★★★ 通过自定义镜像扩展 ★★★★ 有 marketplace ★★★ 受限较多
Pipeline 定义 Jenkinsfile(Groovy 语法) .gitlab-ci.yml .github/workflows/*.yml .circleci/config.yml
学习成本 偏高(Groovy + 插件生态复杂) 低(YAML + Docker 模式) 低(YAML,社区资料丰富) 中(YAML,有现成 orb)
使用成本 免费开源,但需自建服务器 免费版有 CI 分钟数限制 公共仓库免费,私有仓库有限额 每月有免费额度,超量收费
适合场景 复杂的企业级 CI/CD,定制需求多 GitLab 生态深度用户 GitHub 生态项目 中小团队,快速上手

我个人的选型建议:

  • 团队规模大、需要高度定制、内部有运维能力 → 选 Jenkins
  • 团队已经在用 GitLab 且不想维护额外系统 → GitLab CI 很香
  • 开源项目或 GitHub 重度用户 → GitHub Actions 省心又便宜
  • 初创团队、追求简单 → CircleCI 或者 GitHub Actions

Jenkins 核心流程与知识体系

下面这张 SVG 图帮你梳理 Jenkins 的核心工作流——从代码提交到最后部署,以及 Jenkins 的组件关系。

Jenkins 持续集成核心流程 代码仓库 Git/SVN 触发机制 Webhook / 定时 / 手动 Jenkins Master 调度 / 管理 / 日志 Jenkins Agent 执行构建任务 构建产物 JAR / War / Docker 镜像 部署环境 测试 / 预发布 / 生产 说明: 代码变更触发 Jenkins Master 调度 Agent 执行 Pipeline,产出构建物并部署到目标环境。 一次完整的 CI 流程 = 拉代码 → 编译测试 → 打包 → 归档 → 通知。
避坑指南:我曾经在一个项目中配置了多台 Agent,结果因为 Agent 的 JDK 版本不一致,导致在 Master 上测试通过的代码到了 Agent 上编译失败。从那时起,我养成了一个习惯:把所有 Agent 的环境用 Docker 容器统一,Jenkins 只负责调度,构建环境完全由容器镜像管控。这样一来,你再也不用担心“在我电脑上能跑”这种尴尬问题了。

好了,Jenkins 的基本概念和历史就到这儿。熟悉了这些,后面咱们就可以动手搭实际流水线了。记住一句话:CI 不是银弹,但合理用好 Jenkins,能让你的团队少加很多没必要的班。