一、Jenkins 是什么
Jenkins 是一个开源的持续集成(CI)/ 持续交付(CD) 工具。核心作用是把"构建、测试、打包、部署"这些重复工作自动化,当你提交代码或按计划触发时自动执行流水线。
核心概念:
- Job(任务):一次要执行的构建工作,是 Jenkins 的最小单元
- Pipeline(流水线):把多个步骤串成一条自动化流程,Jenkins 2.x 的后核心玩法
- Node(节点/Agent):实际执行任务的机器(可以是本机 Master 或远程机器)
- Master(主节点):负责调度、管理界面,也可以执行任务
- Workspace(工作区):每次构建时拉取代码、存放构建产物的目录
二、安装与启动
1. 环境要求
- Java 8+(推荐 11 或 17)
- 内存至少 2GB+(推荐 4GB)
- 支持 Windows / macOS / Linux / Docker
2. 常用安装方式
方式一:直接下载 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
3. 初始化步骤
- 访问
http://localhost:8080 - 从日志或文件
/var/lib/jenkins/secrets/initialAdminPassword获取初始密码 - 创建管理员账号
- 安装推荐插件(Install Suggested Plugins)
- 设置实例 URL
三、核心界面与配置
1. 系统管理(Manage Jenkins)
- 系统配置:全局环境变量、JDK/Git/Maven 等工具路径、邮件通知
- 插件管理:安装 / 更新 / 卸载插件
- 凭据(Credentials):存 Git 密码、SSH Key、Token 等敏感信息,供构建时使用
- 节点管理:添加和管理执行节点
2. 凭据添加(重点,别把密码写死到脚本里)
凭据类型常见有:
- Username with password:Git 用户名密码
- SSH Username with private key:SSH 登录
- Secret text:Token / API Key
在
Manage Jenkins → Credentials → Global → Add Credentials中添加。
四、构建 Job 的两种主流方式
方式一:Freestyle Project(自由风格任务,入门友好)
界面点选配置,适合简单场景:
- 源码管理:填 Git 仓库 + 凭据
- 构建触发器:定时(cron)、轮询 SCM、或钩子触发
- 构建步骤:可选 Execute shell / Windows batch、调用 Maven 等
方式二:Pipeline(流水线,现代主流,推荐学习方向)
用代码(Jenkinsfile)定义整个流程,可版本化、可复用,是 CI/CD 的方向。
五、Pipeline 核心语法
Jenkinsfile 支持两种语法:
1. Declarative Pipeline(声明式,推荐入门)
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'
}
}
}
}
2. Scripted Pipeline(脚本式)
更灵活但复杂,用 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 / Credentials Binding:凭据管理
- Email Extension:构建结果邮件通知
- Gitee / GitLab:国内 Git 平台集成,可用 Webhook 触发
- Docker Pipeline:在流水线中调用 Docker
- Publish Over SSH:构建产物发布到远程服务器
七、Webhook 自动触发(CI 的"自动"来源)
让 Git 平台在代码提交时主动通知 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" 生成器帮你生成代码,减少手写错误
需要我进一步展开某一部分吗?比如写一份完整的 Jenkinsfile(含参数化、多阶段、部署)范例 ,或者Blue Ocean 可视化操作 、与 Gitee/GitLab 完整对接的实战步骤?