Jenkins

Jenkins 是什么

Jenkins 是一款开源的持续集成/持续交付(CI/CD)自动化工具,用于自动化软件开发中的构建、测试和部署流程。是目前企业使用最广泛的 CI/CD 工具之一,特别适合私有化部署的场景。

image-142565aa diagram-1773900729770-bce8833a
场景 说明
代码提交触发构建 每次 push 代码自动触发编译
自动化测试 运行单元测试、集成测试
代码质量检查 集成 SonarQube 分析代码
自动化部署 部署到服务器、Docker、K8s
定时任务 定时执行脚本或构建
多分支流水线 不同分支走不同流程

想象你是一个工厂流水线主管:

  • 原来:工人手动焊接 → 手动检测 → 手动包装
  • 有了 Jenkins:代码一提交,自动完成所有步骤,出错了自动报警

当前场景

环境 地址 用途 谁能访问
本地 localhost 自己开发调试 只有你
内网 crm.cnstaff.cn 团队内部测试 公司内网
预发布 crm.quanzhi.com 上线前最终验证 配置hosts后可访问
生产 crm.quanzhi.com 真实用户使用 所有人

公司Jenkins环境 :http://192.168.1.72:8080/

image-07d7f798

有不同的账号

同步到内网 crm.cnstaff.cn

使用:

quanzhi quanzhi.com.cn!

登录

可将项目同步到内网

点击 Crm → 点击左侧「立即构建」→ Jenkins 会自动把 crmnew 项目的代码打包同步到内网

image-d5c369ea image-ee8a5d89

这是内网测试环境,只有公司内部网络能访问

构建完成后,在内网打开 crm.cnstaff.cn 就能看到最新代码

同步到预发布 crm.quanzhi.com/login

预发布环境 = 和生产环境几乎一样,但不是真正给用户用的

用来在「上线前最后验证」

使用

yufabu yu@123

登录

可将项目同步到预发布

image-e96ba121 image-658cbc92

预发布构建后,五分钟后代码才会同步到预发布

Jenkins 构建完 ≠ 立刻生效

预发布服务器有自动同步脚本,5分钟跑一次,所以要等一下

需要修改host

打开注释:

c04eab9870e3a332276ee3f3e0c1722b-eac72523

访问:crm.quanzhi.com/login

image-5cde787f

同步到生产 crm.quanzhi.com/login

ats

ats.com

区别在于hosts

hosts 文件的作用:让你电脑把 crm.quanzhi.com 解析到 121.36.51.15(预发布服务器),而不是真正的生产服务器

image-7406a102

hosts就是重定向对吧 crm.quanzhi.com这个域名本身是解析在生产服务器上 但是我们也可以自定义用hosts定向在121.36.51.15(预发布服务器)上?意思就是不管域名绑定哪个ip 我不管 我反正访问这个域名就相当于访问我定义的这个ip?取个别名

image-93f6cad1

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 的架构

diagram-1773909997965-58ec4183

Master 负责管理和调度,Node 负责干活 小团队经常 Master 自己也干活

4. 天气图标的含义

你截图里每个任务前面都有天气图标,它表示最近构建的稳定性

图标 含义 说明
☀️ 晴天 最近构建全部成功 健康状态,放心
🌤️ 少云 大部分成功,偶尔失败 基本正常
⛅ 多云 成功失败各半 需要关注
🌧️ 下雨 大部分失败 有问题,需要排查
⛈️ 雷暴 最近构建全部失败 赶紧修

你们的 Crm 任务看起来是 多云/下雨 状态 → 说明最近有些构建失败了

5. 构建状态的含义

颜色 状态 说明
🔵 蓝色 SUCCESS 构建成功
🔴 红色 FAILURE 构建失败
🟡 黄色 UNSTABLE 构建完成但有警告
⚪ 灰色 ABORTED 构建被手动取消
🔵 闪烁 RUNNING 正在构建中

安装与配置

1. Jenkins 的运行环境

image-4b61dc51
公司已经装好了 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. 初始化配置

image-476811ba

创建任务与构建

1. Job 的类型

类型 说明 适用场景
Freestyle Project 自由风格,界面配置 简单任务,你们公司应该用的这种
Pipeline 用代码定义流程 复杂流程,现代主流
Multibranch Pipeline 多分支流水线 每个分支自动构建
Folder 文件夹,归类用 任务太多时分类

2. 一个 Job 的完整结构

image-ff1351ed

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 → 左侧「配置」→ 可以看到这个任务的所有设置

构建触发器

有哪些触发方式

image-3e19ed03

定时构建语法(和Linux cron一样)

# 格式:分 时 日 月 周
H/15 * * * *     # 每15分钟
H 8 * * 1-5      # 工作日每天早上8点
H 0 * * *        # 每天午夜

SVN/Git 钩子触发(最理想的方式)

image-7db4dba2

现在是手动触发,也可以配成自动

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 可视化

image-6c51b9f4 > 如果某个阶段失败了,后面就不会执行,很直观

实战常见操作

1. 构建失败怎么排查

image-6903d446

2. 常用 Jenkins 页面

页面 路径 用途
首页 / 查看所有任务状态
任务详情 /job/Crm/ 查看Crm的构建历史
构建日志 /job/Crm/2760/console 查看第2760次构建的日志
任务配置 /job/Crm/configure 修改任务配置
系统管理 /manage 管理插件、全局配置
凭据管理 /credentials 管理密码、SSH密钥

3. 公司的完整工作流

diagram-1773912421976-121db05e

组内导航:⬅️ 从手动部署到自动呼吸:一场改变世界的运维革命 | 🏠 00-DevOps与运维 | ➡️ CI-CD