每次发版都手动打包、传服务器、重启,还生怕手抖删错东西 —— 这类重复活,就该交给工具。Jenkins 干的就是这件事。
Jenkins 是什么
Jenkins 是一个开源的持续集成(CI)/ 持续交付(CD)工具。核心作用一句话:把 "构建、测试、打包、部署" 这些重复工作自动化,你提交代码或按计划触发时,它自动跑完整条流水线。
先记住五个核心概念,后面全程绕不开:
表格
| 概念 | 是什么 |
|---|---|
| Job(任务) | 一次要执行的构建工作,Jenkins 的最小单元 |
| Pipeline(流水线) | 把多个步骤串成一条自动化流程,Jenkins 2.x 之后的主流玩法 |
| Node / Agent(节点) | 实际执行任务的机器,可以是本机 Master,也可以是远程机器 |
| Master(主节点) | 负责调度和管理界面,自己也能执行任务 |
| Workspace(工作区) | 每次构建时拉取代码、存放构建产物的目录 |
三步装好它
环境要求
- Java 8+(推荐 11 或 17)
- 内存至少 2GB(推荐 4GB)
- Windows /macOS/ Linux / Docker 都支持
三种安装方式,挑一个顺手的
方式一:直接下 war 包(最直观)
wget https://get.jenkins.io/war-stable/latest/jenkins.war java -jar jenkins.war --httpPort=8080方式二:Docker(推荐,不脏系统)
docker run -d -p 8080:8080 -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ --name jenkins jenkins/jenkins:lts方式三:Linux 原生包
sudo apt install jenkins # Debian/Ubuntu sudo systemctl restart jenkins初始化(第一次启动必做)
- 访问
http://localhost:8080 - 取初始密码:看启动日志,或直接打开
/var/lib/jenkins/secrets/initialAdminPassword - 创建管理员账号
- 选安装推荐插件(Install Suggested Plugins)
- 设置实例 URL
进来后,先认两个地方
系统管理(Manage Jenkins)
- 系统配置:全局环境变量、JDK / Git / Maven 等工具路径、邮件通知
- 插件管理:安装 / 更新 / 卸载插件
- 凭据(Credentials):存 Git 密码、SSH Key、Token 等敏感信息,供构建时调用
- 节点管理:添加和管理执行节点
凭据怎么加(重点:别把密码写死在脚本里)
常见凭据类型:
表格
| 类型 | 用来存什么 |
|---|---|
| Username with password | Git 用户名密码 |
| SSH Username with private key | SSH 登录信息 |
| Secret text | Token / API Key |
添加路径:Manage Jenkins → Credentials → Global → Add Credentials。
建任务的两种方式
方式一:Freestyle Project(自由风格,入门友好)
全程界面点选,适合简单场景:
- 源码管理:填 Git 仓库 + 凭据
- 构建触发器:定时(cron)、轮询 SCM、或 Webhook 钩子触发
- 构建步骤:Execute shell / Windows batch、调用 Maven 等
方式二:Pipeline(流水线,现代主流,建议重点学)
用代码(Jenkinsfile)定义整个流程,可以版本化、可复用 —— 这才是 CI/CD 的长期方向。
Pipeline 语法速通
Jenkinsfile 支持两种写法。
声明式(Declarative,推荐入门)
pipeline { agent any stages { stage('拉取代码') { steps { echo 'git clone...' checkout scm } } stage('构建') { steps { sh 'mvn clean package' } } stage('测试') { steps { sh 'mvn test' } } stage('部署') { steps { echo 'deploy to server' } } } }脚本式(Scripted)
用node {}包裹,更灵活但也更复杂:
node { stage('构建') { sh 'mvn clean package' } }常用指令速查
表格
| 指令 | 作用 | 示例 |
|---|---|---|
| agent | 指定在哪执行 | agent { label 'slave1' } |
| stages / stage | 阶段划分 | stage('Build') |
| steps | 具体步骤 | sh 'ls' |
| environment | 环境变量 | environment { FOO = 'bar' } |
| when | 条件执行 | when { branch 'main' } |
| post | 无论成败都执行的分支 | post { always { ... } } |
| parameters | 参数化构建 | parameters { string(name:'BRANCH') } |
| credentials | 引用凭据 | credentials('my-cred') |
常用插件(按需装,别全装)
- Git:源码管理(默认带)
- Pipeline:流水线支持(默认带)
- Blue Ocean:更友好的可视化流水线界面
- Credentials Binding:把凭据注入构建环境
- Email Extension:构建结果邮件通知
- Gitee / GitLab:国内 Git 平台集成,支持 Webhook 触发
- Docker Pipeline:在流水线里调用 Docker
- Publish Over SSH:把构建产物发布到远程服务器
Webhook:让 "自动" 真正自动起来
原理很简单 —— 让 Git 平台在你 push 代码时主动通知 Jenkins:
- Jenkins 侧装好对应的 Git 插件(如 Gitee / GitHub)
- 在 Job 配置中添加触发方式:"Gitee webhook 触发构建"
- 在 Job 设置里生成一个 Webhook URL 和 Secret Token
- 到代码仓库平台配置 Webhook,URL 填 Jenkins 地址,保存
之后每次 push 代码,Jenkins 自动开始构建,不用你动手。
定时构建:cron 语法
在触发器里写 cron 表达式:
# 每天凌晨 2 点 H 2 * * * # 每 30 分钟 H/30 * * * * # 周一到周五每天 9 点 H 9 * * 1-5这里的H表示 "哈希",作用是把同一时刻的任务错开,别让一堆构建挤在整点同时跑。
完整学习路线
- 入门:装好 Jenkins → 手动建一个 Freestyle Job → 学会查构建日志、定位失败
- 上道:Git 关联 + Webhook 自动触发 + 邮件通知
- 进阶:把所有 Job 迁移成 Pipeline + Jenkinsfile,跑通 CI 全流程
- 深入:多节点分布式构建、凭据体系规范化、参数化构建、与 Docker / K8s 结合
- 生产:集成代码质量管理(SonarQube)、制品仓库(Nexus)、CD 自动化部署
六个过来人踩过的坑
- 密码别硬编码:密码、Token 一律走 Credentials
- 日志是救命稻草:构建失败先看 Console Output 尾部,多半能定位
- 定时任务错峰:大型构建别挤在同一时刻,用
H哈希错开 - 排查时保留工作区:勾选 Keep workspace,别每次都清空
- 升级前先备份:升级前备份
/var/lib/jenkins,这是老坑了 - 不会写 Jenkinsfile?:直接用 UI 里的 "Pipeline Syntax" 生成器,对着选项填就能生成代码,少手写错误