1. CI/CD概念与Jenkins简介

大家好,我是你们的讲师。今天咱们聊聊CI/CD和Jenkins。说实话,这个概念刚出来那会儿,我也觉得挺玄乎的。但干久了你会发现,它其实就是一套让软件交付更靠谱的方法论。

什么是持续集成?

持续集成,英文叫Continuous Integration,简称CI。说白了就是:开发人员频繁地把代码合并到主干

我刚开始带团队时,大家习惯各自开发一两周,最后合并。结果呢?合并那天简直是灾难——冲突一堆,编译不过,测试全红。后来我强制要求每天至少合并一次,配合自动化构建和测试,问题当天就暴露,修复成本低得多。

核心要点:持续集成 = 频繁合并 + 自动化构建 + 自动化测试

为什么需要CI?你想想看,如果代码集成间隔越长,冲突概率越大,问题发现越晚,修复成本越高。CI就是要把这个周期压缩到极致。

什么是持续交付?

持续交付(Continuous Delivery)是在CI基础上往前走了一步。它确保代码随时可以发布到生产环境,但要不要发布,由人来决定。

我记得有个项目,客户要求每周五下午四点必须能演示最新功能。如果没有持续交付,每次演示前都要加班打包、部署、测试,累得半死。用了持续交付后,只要代码通过自动化测试,就能自动部署到预发布环境,演示前点个按钮就行。

我的经验:持续交付的关键是「一键部署」。如果部署需要手动操作超过3步,那就不算真正的持续交付。

什么是持续部署?

持续部署(Continuous Deployment)更激进——代码通过自动化测试后,自动部署到生产环境,完全不需要人工干预。

我曾经在互联网公司见过这种模式。每次代码合并到主分支,自动化流水线就开始跑:编译→单元测试→集成测试→性能测试→安全扫描→灰度发布→全量发布。整个过程大概15分钟,每天能发布几十次。

注意:持续部署对自动化测试的覆盖率要求极高。如果测试覆盖不全,线上出问题的概率会很大。我个人建议,测试覆盖率低于80%的团队,先别急着上持续部署。

三者的关系,我用个表格总结一下:

概念 自动化程度 人工干预 适用场景
持续集成 编译+测试 需要 所有团队
持续交付 编译+测试+部署到预发布 需要(生产发布) 大多数团队
持续部署 全自动化 不需要 测试完善的团队

Jenkins的历史与优势

说到CI/CD工具,Jenkins是绕不开的。它最初叫Hudson,是Sun公司的一个工程师在2004年开发的。后来Oracle收购了Sun,社区和Oracle闹掰了,就分家出来改名叫Jenkins。

为什么Jenkins能活这么久?我总结了几点:

  • 开源免费——没有授权费用,社区活跃
  • 插件生态丰富——超过1500个插件,几乎能对接所有工具
  • 高度可定制——Pipeline as Code,用代码定义流水线
  • 分布式架构——支持主从节点,能横向扩展

我记得2018年有个项目,需要对接GitLab、SonarQube、Docker、Kubernetes、Jira、Slack等七八个系统。用其他工具折腾了两周没搞定,换成Jenkins,三天就搭好了。插件市场里搜一下,基本都有现成的。

一句话总结:Jenkins就是CI/CD界的瑞士军刀——不一定最锋利,但什么都能干。

Jenkins的核心架构

Jenkins的架构其实不复杂。我画个图给你描述一下:

主节点(Master):负责调度任务、管理配置、提供Web界面。它本身不执行具体的构建任务。

从节点(Agent/Slave):真正干活的地方。可以是一台物理机、虚拟机、Docker容器,甚至是Kubernetes Pod。

为什么要分主从?嗯,这里要注意:如果所有任务都在主节点上跑,一旦主节点负载过高,整个Jenkins就卡死了。我曾经吃过这个亏——团队20个人同时触发构建,主节点直接OOM,所有任务都挂了。

后来我改成主从架构:主节点只负责调度,从节点用Docker动态创建,用完就销毁。这样既灵活又稳定。

核心组件包括:

  • Jenkins Master:调度中心,管理界面
  • Jenkins Agent:执行节点,运行任务
  • Job/Project:任务单元,定义要做什么
  • Pipeline:流水线,定义怎么做
  • Plugin:插件,扩展功能

一个典型的Jenkins工作流程是这样的:

开发者提交代码 → GitLab触发Webhook → Jenkins Master接收请求
→ 分配Agent节点 → Agent拉取代码 → 执行编译、测试、打包
→ 生成报告 → 通知结果(邮件/钉钉/Slack)

避坑指南:我曾经遇到过Agent节点磁盘空间不足导致构建失败的问题。后来我在每个Agent上加了磁盘监控脚本,低于20%自动报警。建议你也加上。

好了,这一章的内容就到这里。下一章我们会动手安装Jenkins,并配置第一个流水线。到时候你会真正感受到,什么叫「自动化真香」。