Jenkins
Jenkins 是什么
Jenkins 是一款开源的持续集成/持续交付(CI/CD)自动化工具,用于自动化软件开发中的构建、测试和部署流程。是目前企业使用最广泛的 CI/CD 工具之一,特别适合私有化部署的场景。
| 场景 | 说明 |
|---|---|
| 代码提交触发构建 | 每次 push 代码自动触发编译 |
| 自动化测试 | 运行单元测试、集成测试 |
| 代码质量检查 | 集成 SonarQube 分析代码 |
| 自动化部署 | 部署到服务器、Docker、K8s |
| 定时任务 | 定时执行脚本或构建 |
| 多分支流水线 | 不同分支走不同流程 |
想象你是一个工厂流水线主管:
- 原来:工人手动焊接 → 手动检测 → 手动包装
- 有了 Jenkins:代码一提交,自动完成所有步骤,出错了自动报警
当前场景
| 环境 | 地址 | 用途 | 谁能访问 |
|---|---|---|---|
| 本地 | localhost | 自己开发调试 | 只有你 |
| 内网 | crm.cnstaff.cn | 团队内部测试 | 公司内网 |
| 预发布 | crm.quanzhi.com | 上线前最终验证 | 配置hosts后可访问 |
| 生产 | crm.quanzhi.com | 真实用户使用 | 所有人 |
公司Jenkins环境 :http://192.168.1.72:8080/
有不同的账号
同步到内网 crm.cnstaff.cn
使用:
quanzhi quanzhi.com.cn!
登录
可将项目同步到内网
点击 Crm → 点击左侧「立即构建」→ Jenkins 会自动把 crmnew 项目的代码打包同步到内网
这是内网测试环境,只有公司内部网络能访问
构建完成后,在内网打开 crm.cnstaff.cn 就能看到最新代码
同步到预发布 crm.quanzhi.com/login
预发布环境 = 和生产环境几乎一样,但不是真正给用户用的
用来在「上线前最后验证」
使用
yufabu yu@123
登录
可将项目同步到预发布
预发布构建后,五分钟后代码才会同步到预发布
Jenkins 构建完 ≠ 立刻生效
预发布服务器有自动同步脚本,5分钟跑一次,所以要等一下
需要修改host
打开注释:
同步到生产 crm.quanzhi.com/login
ats
区别在于hosts
hosts 文件的作用:让你电脑把
crm.quanzhi.com解析到121.36.51.15(预发布服务器),而不是真正的生产服务器
hosts就是重定向对吧 crm.quanzhi.com这个域名本身是解析在生产服务器上 但是我们也可以自定义用hosts定向在121.36.51.15(预发布服务器)上?意思就是不管域名绑定哪个ip 我不管 我反正访问这个域名就相当于访问我定义的这个ip?取个别名
hosts 优先级 > DNS解析,所以你配了hosts,DNS那边怎么解析都跟你没关系。
但「别名」这个说法稍微差一点点
| 你说的 | 更准确的说法 |
|---|---|
| 取别名 | 域名欺骗 / 本地DNS覆盖 |
| 重定向 | 重定向一般指服务器返回302跳转,不太一样 |
更准确理解: "我本地认为这个域名对应这个IP,骗过我自己的电脑" 其他人的电脑不受影响,只有你自己的电脑会走预发布
为什么要用域名而不直接访问IP?
因为服务器上可能跑了很多个网站,用IP访问它不知道你要哪个:
121.36.51.15 这台服务器上:
├── crm.quanzhi.com → CRM预发布
├── www.quanzhi.com → 官网预发布
└── passport.quanzhi.com → 登录系统预发布
直接访问 121.36.51.15 → 服务器懵了,不知道给你哪个
访问 crm.quanzhi.com(指向121.36.51.15)→ 服务器认出来,返回CRM
所以必须用域名,再用hosts把域名偷偷指向预发布服务器
使用
基础概念
1. Jenkins 是什么
一句话:自动帮你做重复事情的机器人
没有 Jenkins:
你写完代码 → 手动提交 → 手动登录服务器 → 手动拉代码 → 手动编译 → 手动部署
有了 Jenkins:
你写完代码 → 提交 → 点一下构建(甚至自动触发)→ 全部自动完成
2. 核心术语
| 术语 | 大白话 | 你们公司的例子 |
|---|---|---|
| Job / 任务 | Jenkins 里的一个「工作项」 | 截图里的 Crm、admincampus 等每一行 |
| Build / 构建 | 执行一次任务 | 点了「立即构建」就是执行一次 |
| Build Number | 第几次构建 | Crm 的 #2760 就是第2760次构建 |
| Workspace | Jenkins 拉代码的工作目录 | Jenkins 服务器上的一个文件夹 |
| Node / 节点 | 执行构建的机器 | 你们截图左边"1 空闲 2 空闲"就是2个节点 |
| Plugin / 插件 | 给 Jenkins 加功能的扩展 | SVN插件、邮件通知插件等 |
| Console Output | 构建日志,排错全靠它 | 每次构建都能看到详细输出 |
3. Jenkins 的架构
Master 负责管理和调度,Node 负责干活 小团队经常 Master 自己也干活
4. 天气图标的含义
你截图里每个任务前面都有天气图标,它表示最近构建的稳定性:
| 图标 | 含义 | 说明 |
|---|---|---|
| ☀️ 晴天 | 最近构建全部成功 | 健康状态,放心 |
| 🌤️ 少云 | 大部分成功,偶尔失败 | 基本正常 |
| ⛅ 多云 | 成功失败各半 | 需要关注 |
| 🌧️ 下雨 | 大部分失败 | 有问题,需要排查 |
| ⛈️ 雷暴 | 最近构建全部失败 | 赶紧修 |
你们的 Crm 任务看起来是 多云/下雨 状态 → 说明最近有些构建失败了
5. 构建状态的含义
| 颜色 | 状态 | 说明 |
|---|---|---|
| 🔵 蓝色 | SUCCESS | 构建成功 |
| 🔴 红色 | FAILURE | 构建失败 |
| 🟡 黄色 | UNSTABLE | 构建完成但有警告 |
| ⚪ 灰色 | ABORTED | 构建被手动取消 |
| 🔵 闪烁 | RUNNING | 正在构建中 |
安装与配置
1. Jenkins 的运行环境
公司已经装好了 Jenkins (192.168.1.72:8080),所以不需要装
但了解安装过程有助于理解
2. 常见安装方式
# 方式一:Linux 直接安装(最常见)
sudo apt install openjdk-17-jdk # 先装Java
wget https://pkg.jenkins.io/debian/jenkins.io.key
sudo apt install jenkins
sudo systemctl start jenkins
# 方式二:Docker 安装(推荐学习用)
docker run -d -p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
# 方式三:Windows 安装(下载msi安装包)
# https://www.jenkins.io/download/
3. 初始化配置
创建任务与构建
1. Job 的类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
| Freestyle Project | 自由风格,界面配置 | 简单任务,你们公司应该用的这种 |
| Pipeline | 用代码定义流程 | 复杂流程,现代主流 |
| Multibranch Pipeline | 多分支流水线 | 每个分支自动构建 |
| Folder | 文件夹,归类用 | 任务太多时分类 |
2. 一个 Job 的完整结构
3. 以你们的 Crm 任务为例(推测配置)
┌──────────────────────────────────────────┐
│ Job名称:Crm │
├──────────────────────────────────────────┤
│ 源码管理: │
│ SVN → svn://xxx.xxx/crmnew │
│ 账号密码:配置好的凭据 │
├──────────────────────────────────────────┤
│ 构建触发器: │
│ 手动触发(你点"立即构建") │
├──────────────────────────────────────────┤
│ 构建步骤(Shell脚本,大概是这样): │
│ #!/bin/bash │
│ # 拉取SVN最新代码 │
│ svn update │
│ # 同步到内网服务器 │
│ rsync -avz ./ root@内网服务器:/var/www/crm/ │
├──────────────────────────────────────────┤
│ 构建后操作: │
│ 无 / 发送通知 │
└──────────────────────────────────────────┘
4. 现在可以操作的事情
查看构建历史
点击 Crm → 左侧「构建历史」→ 点击某次构建编号 → Console Output
Console Output 是最重要的工具 构建成功了做了什么、失败了为什么,全在里面
查看 Job 配置(如果有权限)
点击 Crm → 左侧「配置」→ 可以看到这个任务的所有设置
构建触发器
有哪些触发方式
定时构建语法(和Linux cron一样)
# 格式:分 时 日 月 周
H/15 * * * * # 每15分钟
H 8 * * 1-5 # 工作日每天早上8点
H 0 * * * # 每天午夜
SVN/Git 钩子触发(最理想的方式)
现在是手动触发,也可以配成自动
Pipeline 流水线(进阶)
1. 什么是 Pipeline
Pipeline 就是用代码来定义构建流程,比界面点点点更灵活:
// Jenkinsfile - 流水线脚本
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
svn 'svn://your-repo/crmnew'
}
}
stage('编译构建') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
stage('部署到内网') {
steps {
sh 'rsync -avz ./dist/ root@内网服务器:/var/www/crm/'
}
}
stage('部署到预发布') {
steps {
sh 'rsync -avz ./dist/ root@121.36.51.15:/var/www/crm/'
}
}
}
post {
success {
echo '✅ 构建部署成功!'
}
failure {
echo '❌ 构建失败,请检查日志'
}
}
}
2. Pipeline 可视化
> 如果某个阶段失败了,后面就不会执行,很直观
实战常见操作
1. 构建失败怎么排查
2. 常用 Jenkins 页面
| 页面 | 路径 | 用途 |
|---|---|---|
| 首页 | / |
查看所有任务状态 |
| 任务详情 | /job/Crm/ |
查看Crm的构建历史 |
| 构建日志 | /job/Crm/2760/console |
查看第2760次构建的日志 |
| 任务配置 | /job/Crm/configure |
修改任务配置 |
| 系统管理 | /manage |
管理插件、全局配置 |
| 凭据管理 | /credentials |
管理密码、SSH密钥 |
3. 公司的完整工作流
组内导航:⬅️ 从手动部署到自动呼吸:一场改变世界的运维革命 | 🏠 00-DevOps与运维 | ➡️ CI-CD
💬 评论