第四章 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 可用空间 | 构建产物和日志很占空间 |
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
初始化配置
- 解锁后,选择「安装推荐的插件」—— 省心,基本覆盖 Git、Pipeline、BlueOcean 等常用插件。
- 创建第一个管理员用户。别用 admin/admin 这种弱口令,我见过有人这么干,结果被挖矿脚本扫进来,惨不忍睹。
- 配置实例 URL。如果是内网使用,保持默认;如果通过反向代理访问,需要改为实际域名。
💡 小贴士: 我建议你在初始化时就把 时区 改成中国时区。系统管理 → 脚本命令行里运行:
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
否则构建记录的时差会让你头大。
2. 基本流水线创建
Jenkins 的流水线有两种写法:Declarative Pipeline(声明式) 和 Scripted Pipeline(脚本式)。我个人强烈推荐用声明式——结构清晰,可读性强,适合团队协作。
创建一个最简单的 Pipeline 任务
- 点击「新建任务」→ 输入任务名 → 选择「流水线」。
- 在流水线定义中,选择「Pipeline script」。
- 粘贴下面的代码:
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 凭证
- 系统管理 → Manage Credentials → 添加凭据。
- 选择「Username with password」或「SSH key」。
- 填入你的 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 仓库的变化。
配置方式:
- 在 Pipeline 任务配置中,找到「构建触发器」。
- 勾选 Poll SCM(定时轮询)或 GitHub hook trigger(Webhook 触发)。
- 如果选择 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 入门的核心要素。你可以把它当作一张 导览地图,往后学新东西时回头看看,能帮你理清脉络。
常见问题与避坑
配置好 Pipeline 后,发现每次构建都报 Permission denied。后来排查了半天,发现是容器内 Jenkins 用户(uid=1000)对挂载卷的目录没有写权限。记得容器启动时加上 -u root,或者宿主机目录给 777 权限(或者更安全的做法:把 uid 映射一下)。
- 插件不要一股脑全装。有次我装了 100 多个插件,结果 Jenkins 启动越来越慢,最后直接 OOM 挂掉。只装需要的。
- 流水线脚本一定要放在 Jenkinsfile 中,而不是直接在 UI 里写。不然版本管理就是个灾难——我曾经手滑把 UI 里的脚本改崩了,又没备份,只能重写。
agent any适合练手,生产环境建议指定明确的label,否则构建可能被随机分配到不可预期的节点上。
好了,到现在你应该已经装好 Jenkins、跑通第一条流水线,并且能跟 Git 仓库联动了。这就是模块化分层测试的 CI 基础层。下一件事?把构建产物和测试报告跑通,但那是后面章节的内容了。