早上8:30,你刚冲到工位,产品经理就发来消息:“昨晚的代码今天能上线吗?”你打开IDE,打包、上传服务器、停服、备份、部署、重启、测试……一套流程下来,半小时过去了。 如果有10个微服务呢?3个环境呢?每天发布3次呢? ——别慌,Jenkins 来了。一、CI/CD 是什么?为什么要学?1.1 概念扫盲
- 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 部署 → 通知结果关键步骤详解:
- 代码触发:Git 仓库配置 Webhook,代码推送时通知 Jenkins。
- 拉取代码:Jenkins 从 Git 克隆最新代码。
- 构建:执行 Maven、Gradle、npm 等命令。
- 测试:运行单元测试、代码扫描(SonarQube)。
- 打包/镜像:生成 jar/war 包或 Docker 镜像。
- 部署:通过 SSH、K8s API、Ansible 等方式发布到目标服务器。
- 反馈:通过邮件、钉钉、Slack 通知结果。
下面我们以 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
- 浏览器访问 http://你的服务器IP:8080
- 获取初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 选择安装推荐插件(新手友好)
- 创建管理员用户
- 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
- 新建任务 → 选择Pipeline
- 启用Build Triggers→ 勾选 “Generic Webhook Trigger”
- Pipeline 定义选择 “Pipeline script from SCM” → Git 填入仓库地址
- 在代码仓库根目录创建 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 等新兴工具冲击
- Jenkins X:基于 K8s 的云原生 CI/CD,自动管理环境、PR 预览。
- 配置即代码(JCasC):完全用 YAML 管理 Jenkins 配置。
- 更轻量的 Agent:动态 K8s Pod 作为构建节点。
结论:Jenkins 不会消失,但会逐渐演变为“云原生底座 + 可插拔流水线”的形态。对于传统企业和复杂场景,它依然是当前最优解。✅ 七、Jenkins 的核心优势总结
- 久经考验:诞生于 2011 年,生态极其成熟
- 自由度高:几乎任何语言、任何工具都能集成
- 自托管:数据不出企业,安全可控
- 社区强大:95% 的问题都能搜到答案
- 迁移成本低:老旧项目基本都能接进来
- 09:00 提交代码,手动打包
- 10:00 登录跳板机,备份旧包
- 10:15 替换包,重启服务
- 10:30 发版出错,紧急回滚
- 14:00 再次尝试… 陷入内耗
- 提交代码 → 15 分钟后自动上线
- 错误自动发邮件 → 修复后再次 push 即可
- 开发、测试、生产环境一键复用
- 每天多出 2 小时学习和划水(划掉)
CI/CD 不是炫技,而是对时间和稳定性的敬畏。Jenkins 也许不是最时髦的工具,但它绝对是让你从“部署工程师”变回“软件工程师”的利器。
你的每一次部署自动化,都是明天少加一次班的底气。
热门跟贴