Jenkins入门:从架构到第一个任务
说实话,Jenkins 这玩意儿,我最早接触的时候也觉得挺唬人的。什么 Master-Agent、Pipeline、Groovy 脚本……一堆术语砸过来。但等你真正上手了就会发现,它的核心逻辑其实特别简单——就是一个「调度中心」。
你告诉它:代码在哪儿、怎么构建、测试跑什么、结果发哪儿。它就去干活了。
嗯,咱们这一章就把 Jenkins 的底裤扒干净。从架构到安装,从 Pipeline 到第一个自由风格任务,一步步来。
Jenkins 架构:Master 与 Agent
先聊聊架构。Jenkins 采用的是 Master-Agent 模式。说白了,就是「一个大脑 + 多个手脚」。
- Master:负责调度、管理配置、展示界面。它不干重活。
- Agent:真正跑构建、跑测试的节点。可以有很多个。
我在项目中遇到过一种情况:团队有几十个微服务,如果全挤在 Master 上构建,Master 直接卡死。后来我们把构建任务分散到 4 台 Agent 上,瞬间清爽了。
核心要点:Master 只做调度,Agent 做执行。别让 Master 干重活。
下面这张图,是我用 SVG 画的 Jenkins 核心架构。你看一眼就明白了。
Docker 方式安装 Jenkins
我个人习惯用 Docker 装 Jenkins。为什么?省心。不用管 Java 版本、不用管依赖冲突。一条命令搞定。
你想想看,以前装 Jenkins 要先装 JDK,再配环境变量,再下载 war 包……折腾半天。现在呢?
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
跑起来之后,访问 http://localhost:8080。第一次登录需要解锁密码:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
小技巧:我建议把 jenkins_home 挂载到宿主机的一个固定目录,比如 /data/jenkins。这样万一容器挂了,数据还在。
安装完成后,跟着向导走。选「安装推荐的插件」就行。别贪多,后面需要什么再加。
注意:Docker 方式下,Jenkins 容器内部默认没有 Docker CLI。如果你需要在 Pipeline 里调用 Docker 命令,记得把宿主机的 Docker 套接字挂载进去:-v /var/run/docker.sock:/var/run/docker.sock
Jenkins Pipeline 基础
Pipeline 是 Jenkins 的核心能力。说白了,就是把构建、测试、部署的流程写成代码。
Pipeline 有两种写法:Declarative(声明式) 和 Scripted(脚本式)。
| 对比项 | Declarative | Scripted |
|---|---|---|
| 语法风格 | 结构化,类似 YAML | 自由 Groovy 脚本 |
| 学习曲线 | 低,容易上手 | 高,需要 Groovy 基础 |
| 灵活性 | 有限,但有内置指令 | 极高,可以写任意逻辑 |
| 推荐场景 | 大部分 CI/CD 场景 | 复杂条件判断、动态流程 |
我个人建议:能用 Declarative 就用 Declarative。它更清晰,更容易维护。我曾经接手过一个项目,里面全是 Scripted Pipeline,代码写得跟天书一样……后来我花了两周才理清楚。
Declarative Pipeline 示例
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/example/my-project.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Archive') {
steps {
archiveArtifacts artifacts: 'target/*.jar'
}
}
}
}
你看,每个阶段做什么,一目了然。Checkout 拉代码,Build 编译,Test 跑测试,Archive 归档产物。
Scripted Pipeline 示例
node {
stage('Checkout') {
checkout scm
}
stage('Build') {
sh 'mvn clean package'
}
stage('Test') {
sh 'mvn test'
}
stage('Archive') {
archiveArtifacts artifacts: 'target/*.jar'
}
}
Scripted 更自由,但可读性差一些。比如 node {} 块里可以嵌套任意 Groovy 代码,写复杂了容易把自己绕进去。
我的建议:新手从 Declarative 开始。等遇到「Declarative 搞不定」的场景,再切到 Scripted。比如动态生成 stage、根据条件跳过某些步骤等。
第一个自由风格任务
Pipeline 虽然好,但 Jenkins 最经典的任务类型其实是「自由风格任务」(Freestyle Project)。它适合快速验证、简单场景。
我来带你走一遍:
- 点击「新建任务」→ 输入名称 → 选择「自由风格项目」
- 在「源码管理」里选 Git,填仓库地址
- 在「构建触发器」里,可以选 Poll SCM 或 Webhook
- 在「构建」里,点「增加构建步骤」→ 选「执行 Shell」
- 在 Shell 框里输入:
echo "Hello, Jenkins!" && mvn clean package - 在「构建后操作」里,可以归档产物或发邮件
- 保存,点「立即构建」
就这么简单。你点一下「构建历史」里的那个构建号,就能看到控制台输出。
避坑指南:我曾经犯过一个低级错误——在自由风格任务里直接写死了路径。后来换了一台 Agent,路径不对,构建直接挂了。所以,尽量用相对路径,或者用 Jenkins 内置的环境变量,比如 $WORKSPACE。
自由风格任务适合什么场景?
- 快速验证一个构建脚本
- 临时跑一次性的任务
- 给不熟悉 Pipeline 的同事用
但如果你要做正式的 CI/CD 流程,我强烈建议你迁移到 Pipeline。因为 Pipeline 是代码,可以版本化管理,可以复用,可以审查。
嗯,这一章的内容就到这儿。Jenkins 入门其实不难,关键是理解它的架构思维——Master 调度、Agent 执行、Pipeline 编排。把这个想通了,后面学什么都是水到渠成的事。