早上8:30,你刚冲到工位,产品经理就发来消息:“昨晚的代码今天能上线吗?”你打开IDE,打包、上传服务器、停服、备份、部署、重启、测试……一套流程下来,半小时过去了。 如果有10个微服务呢?3个环境呢?每天发布3次呢? ——别慌,Jenkins 来了。
一、CI/CD 是什么?为什么要学?1.1 概念扫盲
  • CI(持续集成):开发人员频繁地将代码合并到主干,每次合并都通过自动化构建(编译、测试)来验证,尽早发现集成错误。
  • CD(持续交付/部署)
    • 持续交付:确保代码可随时部署到生产环境(需人工触发)。
    • 持续部署:代码变更自动部署到生产环境(全程无人干预)。
1.2 为什么需要 CI/CD?
  • 减少手动操作带来的失误
  • 快速反馈代码质量(提交即检测)
  • 统一部署流程,不再“本地跑得好好的”
  • 解放双手,专注写代码
一句话:让重复的事情自动化,让复杂的事情简单化。
二、Jenkins 是什么?有哪些特色?2.1 简介

Jenkins 是一个开源的、基于 Java 开发的自动化服务器,是目前最流行的 CI/CD 工具之一。它提供了数百个插件,几乎能与所有开发、测试、部署工具集成。

2.2 核心特色

特色

开源免费

社区活跃,生态丰富

插件生态

超过 1800 个插件,支持 Git、Maven、Docker、K8s 等

分布式构建

支持 Master-Agent 架构,多机并行

流水线即代码

Pipeline 使用 Groovy 编写,可版本化管理

多平台支持

Windows、Linux、macOS 通吃

Web 管理界面

配置直观,操作简单

三、Jenkins 与同类工具对比(表格必收藏)

特性

Jenkins

GitLab CI

GitHub Actions

CircleCI

开源免费

有限制

有限制

有限制

插件数量

1800+

中等

中等

配置复杂度

较高

中等

流水线语法

Groovy

YAML

YAML

YAML

学习成本

中高

适合场景

复杂流程、企业级

GitLab 生态

GitHub 生态

云原生团队

结论:如果你需要高度定制、私有化部署、兼容老旧项目,选 Jenkins 绝不会错。
⚙️ 四、Jenkins 工作原理(一张图搞懂)

text

开发者 push 代码 → Git(Webhook触发)→ Jenkins 拉取代码 → 编译/测试 → 构建镜像 → 推送镜像 → SSH 部署 → 通知结果

关键步骤详解:

  1. 代码触发:Git 仓库配置 Webhook,代码推送时通知 Jenkins。
  2. 拉取代码:Jenkins 从 Git 克隆最新代码。
  3. 构建:执行 Maven、Gradle、npm 等命令。
  4. 测试:运行单元测试、代码扫描(SonarQube)。
  5. 打包/镜像:生成 jar/war 包或 Docker 镜像。
  6. 部署:通过 SSH、K8s API、Ansible 等方式发布到目标服务器。
  7. 反馈:通过邮件、钉钉、Slack 通知结果。
五、Jenkins 环境搭建实战(手把手)
下面我们以 CentOS 7/8 为例,搭建一套完整的 Jenkins + Git + Maven + Docker 的 CI/CD 环境。
5.1 安装 Jenkins

推荐使用官方 RPM 包(稳定版)

bash

# 安装 Java 11(Jenkins 需要)sudo yum install -y java-11-openjdk-devel# 添加 Jenkins 源sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.reposudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key# 安装 Jenkinssudo yum install -y jenkins# 启动并设置开机自启sudo systemctl start jenkinssudo systemctl enable jenkins# 查看状态sudo systemctl status jenkins
  • 默认端口:8080
  • 配置文件:/etc/sysconfig/jenkins
  • 工作目录:/var/lib/jenkins
5.2 初始化 Jenkins
  1. 浏览器访问 http://你的服务器IP:8080
  2. 获取初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  3. 选择安装推荐插件(新手友好)
  4. 创建管理员用户
5.3 安装必要插件(必装清单)
  • Git Plugin
  • Pipeline Plugin
  • Maven Integration
  • Docker Pipeline
  • SSH Plugin
  • Blue Ocean(炫酷 UI,推荐)
  • Generic Webhook Trigger
安装路径:Dashboard → 系统管理 → 插件管理
5.4 配置全局工具

进入系统管理 → 全局工具配置

  • JDK:配置本地 JDK 路径(如 /usr/lib/jvm/java-11)
  • Git:默认自动安装
  • Maven:自动安装或本地路径
  • Docker:建议配置 Socket 连接 unix:///var/run/docker.sock
5.5 创建第一个 Pipeline 任务方式一:Freestyle 项目(不适合复杂流程,不推荐)方式二:Pipeline(⭐ 强烈推荐)
  1. 新建任务 → 选择Pipeline
  2. 启用Build Triggers→ 勾选 “Generic Webhook Trigger”
  3. Pipeline 定义选择 “Pipeline script from SCM” → Git 填入仓库地址
  4. 在代码仓库根目录创建 Jenkinsfile

一个典型的 Jenkinsfile 示例(Java + Maven + Docker):

groovy

pipeline {agent anytools {maven 'Maven-3.8.1'jdk 'JDK-11'stages {stage('代码拉取') {steps {git url: 'https://gitee.com/你的项目.git', branch: 'main'stage('编译打包') {steps {sh 'mvn clean package -DskipTests'stage('单元测试') {steps {sh 'mvn test'stage('构建 Docker 镜像') {steps {script {docker.build("myapp:${env.BUILD_ID}")stage('部署到服务器') {steps {sshagent(['你的SSH凭证ID']) {sh '''scp target/*.jar user@你的服务器:/app/ssh user@你的服务器 "systemctl restart myapp"post {success {echo '✅ 流水线成功'failure {echo '❌ 流水线失败,请检查日志'}
5.6 配置 Webhook
  • 在 Git 仓库(Gitee/GitHub) → 管理 → Webhook
  • 填写 URL:http://你的JenkinsIP:8080/generic-webhook-trigger/invoke
  • 触发事件:Push
这样每次推送代码,Jenkins 就会自动执行流水线。
5.7 Docker + Jenkins 进阶(可选)

bash

# 使用 Docker 运行 Jenkins(推荐用于测试/轻量环境)docker run -d \--name jenkins \-p 8080:8080 -p 50000:50000 \-v jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \jenkins/jenkins:lts
注意:需要在容器内安装 Maven、Java 等工具,或使用自定义镜像。
六、未来趋势:Jenkins 会被淘汰吗?6.1 当前挑战
  • 配置相对复杂(Groovy 语法不够友好)
  • UI 老旧(Blue Ocean 仍未全面替代)
  • 云原生环境下,Tekton、ArgoCD 等新兴工具冲击
6.2 未来方向
  • Jenkins X:基于 K8s 的云原生 CI/CD,自动管理环境、PR 预览。
  • 配置即代码(JCasC):完全用 YAML 管理 Jenkins 配置。
  • 更轻量的 Agent:动态 K8s Pod 作为构建节点。
结论:Jenkins 不会消失,但会逐渐演变为“云原生底座 + 可插拔流水线”的形态。对于传统企业和复杂场景,它依然是当前最优解。
✅ 七、Jenkins 的核心优势总结
  • 久经考验:诞生于 2011 年,生态极其成熟
  • 自由度高:几乎任何语言、任何工具都能集成
  • 自托管:数据不出企业,安全可控
  • 社区强大:95% 的问题都能搜到答案
  • 迁移成本低:老旧项目基本都能接进来
八、写在最后:一个普通程序员的逆袭没有 CI/CD 时的一天:
  • 09:00 提交代码,手动打包
  • 10:00 登录跳板机,备份旧包
  • 10:15 替换包,重启服务
  • 10:30 发版出错,紧急回滚
  • 14:00 再次尝试… 陷入内耗
有了 Jenkins 以后:
  • 提交代码 → 15 分钟后自动上线
  • 错误自动发邮件 → 修复后再次 push 即可
  • 开发、测试、生产环境一键复用
  • 每天多出 2 小时学习和划水(划掉)

CI/CD 不是炫技,而是对时间和稳定性的敬畏。Jenkins 也许不是最时髦的工具,但它绝对是让你从“部署工程师”变回“软件工程师”的利器。

你的每一次部署自动化,都是明天少加一次班的底气。