Jenkins入门介绍 - 什么是CI/CD?小白必看!

Jenkins入门介绍 — 什么是CI/CD?

Jenkins入门介绍 - 什么是CI/CD

欢迎来到Jenkins教程系列的第1篇!如果你是一名刚接触DevOps的新手,或者听说过"CI/CD""Jenkins"这些词但还不太理解,那么这篇文章就是为你准备的。我们将从零开始,用最通俗的语言带你理解Jenkins是什么、CI/CD是什么,以及为什么它们在现代软件开发中如此重要。

一、什么是Jenkins?

Jenkins是一个开源的、基于Java的自动化服务器,用于支持软件开发中的持续集成(CI)持续交付/部署(CD)。简单来说,它就像一个"自动化机器人",可以帮你把代码从编写到上线的整个过程自动化起来。

Jenkins的历史可以追溯到2004年。当时,Sun Microsystems的工程师Kohsuke Kawaguchi(中文社区常称他为"KK")为了简化自己的日常工作,开发了一个名为Hudson的项目。Hudson很快在开发者社区中流行起来,成为最流行的CI工具之一。然而在2011年,由于与Oracle(收购了Sun Microsystems)在项目治理上的分歧,社区决定将项目fork(分叉),新项目命名为Jenkins。从此,Jenkins和Hudson走上了不同的发展道路,而Jenkins凭借活跃的社区和丰富的插件生态,逐渐成为了CI/CD领域的绝对主流。

如今的Jenkins拥有以下特点:

  • 完全免费开源:基于MIT许可证,任何人都可以免费使用和修改
  • 跨平台:支持Windows、Linux、macOS等主流操作系统
  • 插件生态极其丰富:拥有1800+插件,几乎可以和所有主流工具集成
  • 社区活跃:全球数百万开发者在使用和贡献Jenkins
  • 高度可扩展:通过插件和Pipeline可以定制几乎任何自动化流程

二、什么是CI/CD?

理解Jenkins之前,我们必须先搞清楚CI/CD这个概念。CI/CD是现代软件开发的核心理念,也是Jenkins存在的意义。让我们逐一拆解。

2.1 持续集成(Continuous Integration,CI)

想象一下这样的场景:一个团队有5个开发者,每个人都在自己的电脑上写代码,写了整整一周才合并到一起。结果合并的时候发现冲突满天飞,代码根本跑不起来,光是解决冲突就又花了好几天。这种痛苦,做过开发的人都懂。

持续集成就是为了解决这个问题的。它的核心理念是:频繁地将代码合并到主分支,并且每次合并都自动运行构建和测试

具体来说,CI要求开发者:

  • 每天至少向主分支提交一次代码
  • 每次提交都触发自动化的构建过程
  • 每次构建都运行自动化的测试用例
  • 如果构建或测试失败,立即修复,不允许新的代码合并进来

打个比方:CI就像是一个"质检站",每当有新的零件(代码)送到生产线上,质检站就立即检查这个零件是否合格,而不是等到整辆车组装完了才发现零件有问题。

2.2 持续交付(Continuous Delivery,CD)

持续集成保证了代码的质量,那接下来呢?代码通过了测试,我们还需要把它部署到服务器上,让用户能够使用。持续交付就是CI的下一步延伸。

持续交付的意思是:代码在通过自动化测试之后,自动地准备好可以随时部署到生产环境的状态。注意,这里说的是"准备好",但最终是否真的部署到生产环境,还需要人工点击一个按钮来确认。

用一个生活中的例子来理解:持续交付就像是一家餐厅的厨房,厨师把菜做好、摆好盘、放在出餐口,但需要服务员确认"这桌客人可以上菜了"才会真正端出去。

2.3 持续部署(Continuous Deployment,CD)

注意,这里缩写也是CD,但含义不同。持续部署比持续交付更进一步:代码通过所有测试后,自动部署到生产环境,完全不需要人工干预

还是用餐厅的比喻:持续部署就是自动售货机——你选好商品付了钱,商品直接就出来了,不需要任何服务员操作。

持续部署听起来很美好,但它对自动化测试的覆盖率要求非常高。如果你的测试不够充分,自动部署就可能导致有问题的代码直接上线,影响用户体验。因此,很多团队选择"持续交付"(人工把关最后一步)而非"持续部署"(全自动上线)。

2.4 CI/CD全流程一览

让我们把CI/CD的完整流程串起来:

开发者提交代码
    ↓
自动拉取最新代码(CI)
    ↓
自动编译/构建(CI)
    ↓
自动运行单元测试(CI)
    ↓
自动运行集成测试(CI)
    ↓
自动打包(如Docker镜像)(CD)
    ↓
自动部署到测试环境(CD)
    ↓
人工确认 / 自动部署到生产环境(持续交付 vs 持续部署)

整个流程中的每一步都可以由Jenkins来自动化完成,这就是Jenkins的核心价值。

三、为什么需要Jenkins?— 手动构建 vs 自动构建

也许你会问:我不用Jenkins,手动做这些事情不行吗?让我们来对比一下。

3.1 手动构建的痛苦

在没有Jenkins的时代,一次典型的发布流程是这样的:

  • 第1步:开发者手动从Git仓库拉取最新代码
  • 第2步:在本地编译打包 mvn clean package
  • 第3步:手动运行测试(或者干脆跳过测试,因为太慢了)
  • 第4步:把打包好的文件用SCP上传到服务器
  • 第5步:SSH登录服务器,停掉旧服务,替换文件,启动新服务
  • 第6步:手动检查服务是否正常运行

这个过程存在严重的问题:

  • 耗时:每次发布至少需要30分钟到1小时,甚至更久
  • 容易出错:手动操作难免遗漏步骤或输错命令
  • 不可重复:不同人操作的方式可能不同,结果不一致
  • 无法追溯:出了问题很难回溯是哪一步出了差错
  • 影响开发效率:开发者把大量时间浪费在部署上,而不是写代码

3.2 自动构建的优雅

使用Jenkins后,同样的流程变成了这样:

  • 开发者只需提交代码到Git
  • Jenkins自动检测到代码变更
  • Jenkins自动拉取、编译、测试、打包、部署
  • 开发者收到构建结果通知(成功或失败)

对比效果:

手动构建:
- 耗时:30分钟 ~ 数小时
- 出错率:高
- 可追溯性:差
- 频率:一周一次甚至更少
- 人的参与:全程手动

自动构建(Jenkins):
- 耗时:几分钟(自动化执行)
- 出错率:极低
- 可追溯性:完整记录每次构建的日志
- 频率:每天多次
- 人的参与:只需提交代码,其余全自动

这就是为什么Jenkins(以及CI/CD)已经成为现代软件开发的标配。它不仅节省时间,更重要的是提高了软件交付的质量和可靠性

四、Jenkins能做什么?— 常见使用场景

Jenkins的功能远不止"编译和部署",它几乎可以自动化任何重复性的软件工程任务。以下是常见的使用场景:

4.1 自动化构建与测试

这是最基础也是最核心的场景。每当开发者提交代码,Jenkins自动执行:

  • 拉取最新代码
  • 编译代码(支持Maven、Gradle、npm、pip等各种构建工具)
  • 运行单元测试和集成测试
  • 生成测试报告

4.2 持续部署

Jenkins可以将构建产物自动部署到各种环境:

  • 部署到测试环境,供QA团队测试
  • 部署到预发布环境(Staging),模拟生产环境验证
  • 部署到生产环境(通常需要人工审批)

支持的部署方式包括SSH、Docker、Kubernetes、云平台(AWS、阿里云等)等。

4.3 代码质量检查

在构建过程中,Jenkins可以集成各种代码质量工具:

  • SonarQube:代码静态分析,检测代码异味、漏洞和重复代码
  • Checkstyle / ESLint:代码风格检查
  • FindBugs / PMD:Bug模式检测
  • Cobertura / JaCoCo:测试覆盖率统计

4.4 定时任务

Jenkins可以执行定时调度任务,例如:

  • 每天凌晨自动运行全量回归测试
  • 每周自动生成项目健康度报告
  • 定时清理过期的构建产物和Docker镜像
  • 定时从外部数据源同步数据

4.5 多环境流水线

通过Jenkins Pipeline,可以定义一条从开发到生产的完整流水线:

开发环境构建 → 单元测试 → 代码扫描 → 集成测试
    → 构建Docker镜像 → 推送镜像仓库 → 部署到测试环境
    → 自动化验收测试 → 人工审批 → 部署到生产环境

每一步的执行条件、超时时间、失败处理策略都可以精细控制。

4.6 自动化通知与协作

Jenkins可以在构建完成后自动发送通知:

  • 邮件通知:构建成功/失败时发送邮件
  • Slack/钉钉/企业微信通知:推送到团队聊天频道
  • Webhook通知:触发其他系统的后续流程

4.7 基础设施自动化

Jenkins不仅用于应用部署,还可以管理基础设施:

  • 配合Terraform自动创建/销毁云资源
  • 配合Ansible自动配置服务器环境
  • 自动管理Kubernetes集群

五、Jenkins的核心概念

在学习使用Jenkins之前,你需要理解以下几个核心概念。这些概念贯穿Jenkins的方方面面,理解它们是掌握Jenkins的基础。

5.1 Job(任务/项目)

Job是Jenkins中最基本的执行单元。你可以把Job理解为"一个要做的事情"。比如,"构建my-app项目"是一个Job,"运行自动化测试"也是一个Job。

Jenkins中有多种类型的Job:

  • Freestyle Project:自由风格项目,通过图形界面配置,适合简单任务
  • Pipeline:流水线项目,通过代码(Jenkinsfile)定义流程,是最推荐的方式
  • Multi-configuration Project:多配置项目,可以在不同环境下执行同一任务
  • Folder:文件夹,用于组织和管理多个Job

5.2 Build(构建)

Build是Job的一次具体执行。每次你触发一个Job,就会产生一个Build。Build有以下重要属性:

  • Build Number:构建编号,从1开始递增,用于唯一标识每次构建
  • Build Status:构建状态,包括成功(蓝色)、失败(红色)、不稳定(黄色)、中止(灰色)
  • Build Log:构建日志,记录了构建过程中的所有输出信息
  • Build Artifacts:构建产物,如编译后的jar包、Docker镜像等

举个例子:你有一个名为"build-my-app"的Job,第1次运行产生了Build #1,第2次运行产生了Build #2,以此类推。每次Build都有完整的日志和产物,方便你追溯和排查问题。

5.3 Pipeline(流水线)

Pipeline是Jenkins最重要的概念之一,也是现代Jenkins使用方式的推荐选择。Pipeline允许你用代码来定义整个构建/部署流程,而不是通过图形界面一步步点击配置。

Pipeline的定义写在Jenkinsfile中,和源代码一起存放在Git仓库中,实现了"构建即代码(Pipeline as Code)"的理念。

一个简单的Pipeline示例:

pipeline {
    agent any
    stages {
        stage('构建') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('测试') {
            steps {
                sh 'mvn test'
            }
        }
        stage('部署') {
            steps {
                sh './deploy.sh'
            }
        }
    }
}

Pipeline的核心组成:

  • Stage(阶段):流水线中的一个逻辑步骤,如"构建""测试""部署"
  • Step(步骤):Stage中的具体操作,如执行一条Shell命令
  • Agent(代理):定义Pipeline在哪里执行
  • Post(后置处理):流水线完成后的操作,如发送通知

5.4 Node(节点)

Node是Jenkins中执行Build的机器。Jenkins支持分布式构建,即可以在多台机器上同时运行任务。

Node分为两种:

  • Master节点:Jenkins的主服务器,负责调度任务、提供Web界面。Master节点本身也可以执行Build,但通常建议让Master专注于调度
  • Agent节点(也称为Slave节点):专门用来执行Build的工作机器。你可以添加多个Agent节点来提高并行构建能力

举个例子:你的Jenkins Master部署在一台服务器上,但你同时配置了3台Agent机器——一台用来跑Java项目的构建,一台用来跑前端项目的构建,一台用来做性能测试。这样多个任务可以并行执行,大大提高了效率。

5.5 Workspace(工作空间)

Workspace是Node上的一个目录,Jenkins在这里检出代码、执行构建。每个Job在每次Build时都会有一个对应的Workspace。

Workspace的典型目录结构如下:

/var/lib/jenkins/workspace/
├── my-app/              # Job "my-app"的工作空间
│   ├── src/             # 源代码
│   ├── pom.xml          # 构建配置
│   └── target/          # 构建产物
├── frontend-build/      # Job "frontend-build"的工作空间
│   ├── package.json
│   └── dist/
└── api-test/            # Job "api-test"的工作空间
    ├── tests/
    └── reports/

理解Workspace很重要,因为:

  • 不同的Job的Workspace是相互隔离的,不会互相干扰
  • 同一Job的多次Build默认复用同一个Workspace,这意味着上次构建的残留文件可能影响下次构建(需要注意清理)
  • Workspace的大小会随着构建次数增长,需要定期清理以避免磁盘空间不足

六、Jenkins生态系统

Jenkins的强大不仅在于其核心功能,更在于其繁荣的生态系统。这个生态系统让Jenkins几乎可以与任何工具集成,满足各种定制化需求。

6.1 插件(Plugins)

插件是Jenkins生态系统的核心。截至2026年,Jenkins插件仓库中已有1800+个插件,涵盖了软件开发生命周期的方方面面。以下是一些最常用的插件分类:

版本控制插件:

  • Git Plugin:与Git仓库集成
  • GitHub Plugin:与GitHub深度集成,支持PR触发构建
  • GitLab Plugin:与GitLab集成
  • SVN Plugin:与Subversion集成

构建工具插件:

  • Maven Project Plugin:Maven项目支持
  • Gradle Plugin:Gradle构建支持
  • NodeJS Plugin:Node.js环境支持

部署与容器插件:

  • Docker Plugin:Docker容器管理
  • Kubernetes Plugin:K8s集群部署
  • AWS / Azure / 阿里云插件:云平台集成

通知与协作插件:

  • Email Extension Plugin:增强的邮件通知
  • Slack Plugin:Slack消息推送
  • DingTalk Plugin:钉钉机器人通知

代码质量插件:

  • SonarQube Plugin:代码质量分析
  • JaCoCo Plugin:测试覆盖率
  • Warnings Next Generation Plugin:编译警告收集

安装插件非常简单:进入Jenkins管理界面 → 插件管理 → 可选插件,搜索并安装即可。安装后大多数插件不需要重启Jenkins就能生效。

6.2 Jenkins社区

Jenkins拥有一个全球性的活跃社区,这是它能够持续发展的重要原因:

  • Jenkins官方文档:https://www.jenkins.io/doc/ — 最权威的参考资料
  • Jenkins中文社区:由国内开发者维护的中文文档和交流平台
  • Jenkins GitHub仓库:https://github.com/jenkinsci/jenkins — 源代码和Issue追踪
  • Jenkins邮件列表和论坛:全球开发者的讨论和互助平台
  • Jenkins世界大会(DevOps World):年度技术大会,汇聚全球Jenkins用户和贡献者

6.3 相关工具对比

在CI/CD领域,Jenkins并不是唯一的选择。以下是常见的CI/CD工具对比:

工具          | 开源  | 特点                          | 适合场景
-------------|------|------------------------------|----------
Jenkins      | 是   | 插件丰富、高度灵活、社区活跃        | 任何规模、复杂流水线
GitLab CI    | 是   | 与GitLab深度集成、YAML配置       | 使用GitLab的团队
GitHub Actions| 否  | 与GitHub深度集成、云端执行        | 开源项目、GitHub用户
CircleCI     | 否   | 云端服务、配置简单、执行速度快      | 中小团队、快速起步
Travis CI    | 否   | 云端服务、开源项目免费            | 开源项目
Tekton       | 是   | 云原生、基于Kubernetes          | K8s原生环境
Drone        | 是   | 轻量级、Docker原生、配置简单       | 容器化项目

Jenkins的最大优势在于灵活性和插件生态。无论你使用什么技术栈、部署到什么环境,几乎都能找到对应的Jenkins插件。而其他工具通常在特定场景下更方便,但灵活性不如Jenkins。

七、总结

在这篇文章中,我们全面了解了Jenkins的基础知识:

  • Jenkins是一个开源的自动化服务器,用于实现CI/CD
  • CI(持续集成)要求频繁合并代码并自动构建测试
  • CD(持续交付)确保代码随时可以部署到生产环境
  • CD(持续部署)更进一步,全自动部署到生产环境
  • Jenkins通过自动化解决了手动构建的效率低、易出错、难追溯等问题
  • Jenkins的核心概念包括Job、Build、Pipeline、Node和Workspace
  • Jenkins拥有1800+插件和活跃的全球社区,生态系统极其繁荣

在下一篇教程中,我们将手把手教你安装和配置Jenkins,让你在自己的环境中运行起第一个Jenkins实例。敬请期待!

发表回复

后才能评论