第四章 Jenkins入门:安装配置,基本流水线

说实话,Jenkins 这玩意儿在国内 CI/CD 圈子里,算是元老级工具了。我2015年刚开始搞持续集成那会儿,它还是 Hudson 的影子,后来才独立出来变成 Jenkins。这么多年过去了,虽然新工具层出不穷,但 Jenkins 凭借 插件生态 和 高度可定制性,依然占据着企业级市场的大头。

你想想看,如果你的团队连 Jenkins 都不会配,那模块化分层测试压根跑不起来。所以咱们先从最基础的说起——怎么装、怎么配、怎么写第一条流水线。

1. 安装与配置

安装 Jenkins 其实没你想的那么玄乎。我个人习惯用 Docker 部署,既干净又方便迁移。如果你是在 Ubuntu 上直接安装,官方也提供了 APT 源。

环境要求

组件 推荐版本 说明
Java JDK 11 或 JDK 17 Jenkins 2.4xx 以上需 Java 11+
内存 最低 2GB,推荐 4GB+ 如果跑大量并行任务,建议 8GB
磁盘 至少 20GB 可用空间 构建产物和日志很占空间
⚠️ 曾经踩过的坑: 我一开始用 JDK 8 跑 Jenkins 2.346,结果一堆插件报错。后来才发现新版本已经放弃 Java 8 了。所以切记——先看版本兼容性表。

Docker 安装(推荐)

# 拉取长期支持版
docker pull jenkins/jenkins:lts

# 启动容器,映射端口和持久化目录
docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

启动后,浏览器访问 http://localhost:8080。首次进入会要求输入初始密码,这个密码怎么找?

docker logs jenkins 2>&1 | grep "Please use the following password"

或者直接进容器里看:

docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

初始化配置

  1. 解锁后,选择「安装推荐的插件」—— 省心,基本覆盖 Git、Pipeline、BlueOcean 等常用插件。
  2. 创建第一个管理员用户。别用 admin/admin 这种弱口令,我见过有人这么干,结果被挖矿脚本扫进来,惨不忍睹。
  3. 配置实例 URL。如果是内网使用,保持默认;如果通过反向代理访问,需要改为实际域名。

💡 小贴士: 我建议你在初始化时就把 时区 改成中国时区。系统管理 → 脚本命令行里运行:

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

否则构建记录的时差会让你头大。

2. 基本流水线创建

Jenkins 的流水线有两种写法:Declarative Pipeline(声明式) 和 Scripted Pipeline(脚本式)。我个人强烈推荐用声明式——结构清晰,可读性强,适合团队协作。

创建一个最简单的 Pipeline 任务

  1. 点击「新建任务」→ 输入任务名 → 选择「流水线」。
  2. 在流水线定义中,选择「Pipeline script」。
  3. 粘贴下面的代码:
pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                echo '拉取代码...'
                // 这里可以放 git clone 命令
            }
        }
        stage('Build') {
            steps {
                echo '开始编译...'
            }
        }
        stage('Test') {
            steps {
                echo '跑单元测试...'
            }
        }
    }
}

然后点「保存」→「立即构建」。你会看到 Jenkins 依次执行 Checkout、Build、Test 三个阶段。

💡 核心理解:
  • agent any:任何可用的执行节点都行。
  • stages:阶段集合,按顺序执行。
  • steps:具体要执行的命令。

3. 与 Git 集成

流水线要是只能手动跑,那还不如直接写 Shell 脚本。真正的 CI 是从 代码提交 自动触发的。

配置 Git 凭证

  1. 系统管理 → Manage Credentials → 添加凭据。
  2. 选择「Username with password」或「SSH key」。
  3. 填入你的 Git 平台(GitHub/GitLab/Gitee)的账号密码或 SSH 私钥。

修改流水线脚本

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git branch: 'main',
                    url: 'https://github.com/your-repo/demo.git',
                    credentialsId: 'your-git-credential-id'
            }
        }
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }
    }
}

你看,git 步骤直接集成了 Git 操作,不需要你自己写 git clone。这是 Jenkins 官方 Pipeline 步骤的强大之处。

4. 自动触发构建

手动点「立即构建」太 Low 了。咱们要让 Jenkins 自动监听 Git 仓库的变化。

配置方式:

  1. 在 Pipeline 任务配置中,找到「构建触发器」。
  2. 勾选 Poll SCM(定时轮询)或 GitHub hook trigger(Webhook 触发)。
  3. 如果选择 Webhook,需要在 Git 仓库设置中添加 Jenkins 的 hook URL:
    http://your-jenkins:8080/github-webhook/
pipeline {
    agent any

    triggers {
        // 每5分钟轮询一次代码仓库
        pollSCM('H/5 * * * *')
        
        // 或者使用 Webhook 触发(需要在 Jenkins 配置中启用)
        // githubPush()
    }

    stages {
        stage('Build') {
            steps {
                echo '触发构建...'
            }
        }
    }
}

为什么会同时支持两种方式?Webhook 是实时的,但需要 Git 平台能够访问 Jenkins;Poll SCM 是备选,适合内网环境或者 Jenkins 不能直接暴露的情况。

知识体系一览

下面这张图总结了 Jenkins 入门的核心要素。你可以把它当作一张 导览地图,往后学新东西时回头看看,能帮你理清脉络。

Jenkins 核心流程概览 环境准备层 JDK 安装 Java 11 / 17 Docker 部署 容器化 / 持久化 Git 凭证 账号 / SSH 密钥 核心配置层 初始化设置 管理员 / URL / 时区 插件管理 Git / Pipeline 凭证配置 Git 仓库访问 流水线层 声明式 Pipeline 推荐 / 可读性强 Stages 阶段 Checkout / Build / Test Steps 步骤 git / sh / echo CI 流程层 Webhook 自动触发 实时 Poll SCM 定时轮询 备选方案

常见问题与避坑

⚠️ 我曾经...

配置好 Pipeline 后,发现每次构建都报 Permission denied。后来排查了半天,发现是容器内 Jenkins 用户(uid=1000)对挂载卷的目录没有写权限。记得容器启动时加上 -u root,或者宿主机目录给 777 权限(或者更安全的做法:把 uid 映射一下)。

💡 印象深刻的教训:
  • 插件不要一股脑全装。有次我装了 100 多个插件,结果 Jenkins 启动越来越慢,最后直接 OOM 挂掉。只装需要的。
  • 流水线脚本一定要放在 Jenkinsfile 中,而不是直接在 UI 里写。不然版本管理就是个灾难——我曾经手滑把 UI 里的脚本改崩了,又没备份,只能重写。
  • agent any 适合练手,生产环境建议指定明确的 label,否则构建可能被随机分配到不可预期的节点上。

好了,到现在你应该已经装好 Jenkins、跑通第一条流水线,并且能跟 Git 仓库联动了。这就是模块化分层测试的 CI 基础层。下一件事?把构建产物和测试报告跑通,但那是后面章节的内容了。