目录
- [一. 简介](#一. 简介)
-
- [1.1 核心概念](#1.1 核心概念)
- [1.2 Pipeline](#1.2 Pipeline)
- [1.3 常用插件](#1.3 常用插件)
- [二. 安装](#二. 安装)
- [三. 启动](#三. 启动)
-
- [3.1 `java -jar`的方式 → 临时使用](#3.1
java -jar的方式 → 临时使用) -
- [3.1.1 配置`JENKINS_HOME` 和 `JAVA_HOME`](#3.1.1 配置
JENKINS_HOME和JAVA_HOME) - [3.1.2 指定端口号启动](#3.1.2 指定端口号启动)
- [3.1.1 配置`JENKINS_HOME` 和 `JAVA_HOME`](#3.1.1 配置
- [3.2 👍systemctl的方式 → 长期使用](#3.2 👍systemctl的方式 → 长期使用)
-
- [3.2.1 配置JDK环境变量](#3.2.1 配置JDK环境变量)
- [3.2.2 指定端口号启动](#3.2.2 指定端口号启动)
- [3.2.3 修改`JENKINS_HOME`](#3.2.3 修改
JENKINS_HOME)
- [3.1 `java -jar`的方式 → 临时使用](#3.1
一. 简介
Jenkins 是目前最流行的开源持续集成(Continuous Integration,CI)和持续交付/部署(Continuous Delivery/Deployment,CD)工具之一。Jenkins 最初的目标是自动化软件构建,现在已经发展成一个功能非常强大的自动化平台,可以自动完成从代码提交到软件部署的整个流程。

简单来说:Jenkins 就是一个自动执行任务的平台,本质上就是:定时或者触发执行脚本。
bash
开发人员修改代码
│
▼
提交到 Git
│
▼
Jenkins 检测到代码变化
│
▼
自动执行:
↓
编译
↓
单元测试
↓
打包 Jar
↓
上传服务器
↓
重启 Spring Boot
↓
通知部署成功
1.1 核心概念
-
Job(任务)- 最基本的概念
- 一个Job通常用多个stage构成
-
Build(构建)- Job 每执行一次,就是一次 Build
- 每次Build都会保存日志
-
Workspace(工作空间)- Pipeline执行过程中,用来存储中间产物的目录
bashapluser@ubuntu22-1:~$ ls -l $JENKINS_HOME/workspace/ drwxr-xr-x 2 apluser apluser 4096 Jul 18 14:37 first-job drwxr-xr-x 3 apluser apluser 4096 Jul 20 09:32 second-pipeline@tmp drwxr-xr-x 3 apluser apluser 4096 Jul 20 10:26 third-pipeline@2@tmp drwxr-xr-x 3 apluser apluser 4096 Jul 20 10:36 third-pipeline@tmp apluser@ubuntu22-1:~$ -
Node- Master节点
- Agent节点
- 一个Master节点对应多个Agent节点
-
Executor- 并发执行槽位
Executor=4表示同时运行个Job
1.2 Pipeline
🔷Pipeline:把整个 CI/CD 流程用代码描述出来的一种方式。
| 对比项 | Declarative Pipeline | Scripted Pipeline |
|---|---|---|
| 风格 | 声明式 | Groovy 脚本式 |
| 可读性 | 高 | 较低 |
| 学习难度 | 低 | 高 |
| 灵活性 | 较高 | 非常高 |
| 官方推荐 | ✅ 是 | 可用于复杂逻辑 |
🔷常见的触发方式:
| 触发方式 | 说明 |
|---|---|
| 手动点击 | 在 Web 页面点击 Build Now |
| 定时构建 | 使用 Cron 表达式定时执行 |
| Git Webhook | Git 仓库推送代码后自动触发 |
| 上游任务 | 一个 Job 完成后触发另一个 Job |
| 远程 API | 通过 URL 或 REST API 触发构建 |
| SCM 轮询 | 定期检查代码仓库是否有变化 |
1.3 常用插件
| 插件 | 用途 |
|---|---|
| Git | 拉取 Git 仓库 |
| Pipeline | 支持 Jenkinsfile |
| SSH Agent | 使用 SSH 密钥连接远程服务器 |
| Credentials | 管理用户名、密码、SSH Key、Token 等凭据 |
| Maven Integration | 与 Maven 构建集成 |
| JUnit | 展示单元测试结果 |
| Blue Ocean | 更现代化的 Pipeline 可视化界面 |
二. 安装
针对不同的平台和操作系统,官方提供了多种安装方式,详情请参考官网:
🔷此处介绍来源于官网的,在Ubuntu平台上的安装方式:
- 添加软件源
bash
sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key
echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
- 安装
bash
sudo apt update
sudo apt install jenkins
- 确认安装成功
bash
apluser@ubuntu22-1:~$ which jenkins
/usr/bin/jenkins
apluser@ubuntu22-1:~$ jenkins --version
2.568.1
apluser@ubuntu22-1:~$ ls -l /usr/share/java/jenkins.war
-rw-r--r-- 1 root root 101063396 Jul 10 00:43 /usr/share/java/jenkins.war
三. 启动
3.1 java -jar的方式 → 临时使用
3.1.1 配置JENKINS_HOME 和 JAVA_HOME
🔷JENKINS_HOME 是 Jenkins 最重要的目录,可以理解为 Jenkins 的数据目录。它保存了几乎所有 Jenkins 的数据,包括:
- Job 配置
- Pipeline 配置
- 插件
- 凭据(加密保存)
- 构建历史
- Workspace(默认情况下)
- 日志
- 用户配置
🔷默认位置:
bash
apluser@ubuntu22-1:~$ ls -ld /var/lib/jenkins
drwxr-xr-x 2 jenkins jenkins 4096 Jul 10 00:43 /var/lib/jenkins
- 可以根据需求自定义
JENKINS_HOME和JAVA_HOME - 使用
java -jar的方式属于临时测试使用,因此临时在~/.bashrc中进行配置
bash
# 创建jenkins_home文件夹
mkdir ~/jenkins_home
# 配置环境变量, Jenkins运行依赖于Java, 因此也需要配置Java的环境变量
nano ~/.bashrc
# 配置java的环境变量
export JAVA_HOME=/home/apluser/JDK/jdk25
# 配置Jenkins的环境变量
export JENKINS_HOME=/home/apluser/jenkins_home
# 导出环境变量
export PATH=$JAVA_HOME/bin:$JENKINS_HOME:$PATH
# 让环境变量生效
source ~/.bashrc
3.1.2 指定端口号启动
- 默认端口号为8080,可以在启动的时候指定端口号
bash
java -jar /usr/share/java/jenkins.war --httpPort=9090
- 如果通过
--httpPort的方式临时指定端口号启动的话,Jenkins会提示反向代理设置错误
修改下图所示的Jenkins URL中的端口号即可

- 第一次启动的时候,会要求设置用户和密码,初始的密码会显示在控制台上,如下所示

3.2 👍systemctl的方式 → 长期使用
jenkins的service配置文件- 不要直接修改,要通过
sudo systemctl edit jenkins来修改
bash
apluser@ubuntu22-1:~$ ls -l /lib/systemd/system/jenkins.service
-rw-r--r-- 1 root root 5639 Jul 10 00:43 /lib/systemd/system/jenkins.service
- 常用的命令
bash
# 启动 Jenkins 服务
sudo systemctl start jenkins
# 停止当前的 Jenkins 服务
sudo systemctl stop jenkins
# 编辑 Jenkins 服务
sudo systemctl edit jenkins
# 重新读取所有 systemd 配置文件, 并不会重启服务
sudo systemctl daemon-reload
# 重启 Jenkins 服务
sudo systemctl restart jenkins
# 设置开机自动启动
sudo systemctl enable jenkins
# 禁止开机自动启动, 不会停止当前已经运行的服务
sudo systemctl disable jenkins
# 查看是否设置为开机启动
sudo systemctl is-enabled jenkins
# 查看是否正在运行
sudo systemctl is-active jenkins
# 查看运行状态
sudo systemctl status jenkins
# 查看服务内容
sudo systemctl show jenkins
systemctl cat jenkins
3.2.1 配置JDK环境变量
🔷Jenkins运行依赖于JDK,因此必须配置JDK的环境变量
- 因为使用
systemctl的方式启动Jenkins服务,因此JDK不能在某个用户的~/.bashrc中进行配置 - 详情请参考这篇博客:Linux Ubuntu中配置安装Java
3.2.2 指定端口号启动
- 默认的端口号会存储在下面所示的两个路径中
/etc/default/jenkins/lib/systemd/system/jenkins.service
- 这两个文件是配合工作的,但真正起作用的是
jenkins.service文件中的 Environment 变量。
bash
apluser@ubuntu22-1:~$ jenkins --version
2.568.1
apluser@ubuntu22-1:~$
apluser@ubuntu22-1:~$ sudo grep HTTP_PORT /etc/default/jenkins
HTTP_PORT=8080
# --httpPort=$HTTP_PORT (default 8080; disable with -1)
# --httpsPort=$HTTP_PORT
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT"
apluser@ubuntu22-1:~$
apluser@ubuntu22-1:~$ sudo grep JENKINS_PORT /lib/systemd/system/jenkins.service
Environment="JENKINS_PORT=8080"
🔺不推荐修改 /lib/systemd/system/jenkins.service,因为:软件升级时,这个文件可能会被覆盖。
👍推荐使用sudo systemctl edit jenkins去修改
- 执行之后,会出现一个全部都是注释的模板配置文件
- 将需要修改的内容添加到如下图所示的开头区域
- 英文注释写的很明白,写到其他地方的话,会被忽略

- 修改完成之后,会在
/etc/systemd/system/目录下,生成一个覆盖默认配置用的jenkins.service.d文件夹和override.conf文件
bash
apluser@ubuntu22-1:~$ ls -l /lib/systemd/system/jenkins.service
-rw-r--r-- 1 root root 5639 Jul 10 00:43 /lib/systemd/system/jenkins.service
apluser@ubuntu22-1:~$
apluser@ubuntu22-1:~$ ls -l /etc/systemd/system/jenkins.service.d/override.conf
-rw-r--r-- 1 root root 41 Jul 21 21:09 /etc/systemd/system/jenkins.service.d/override.conf
apluser@ubuntu22-1:~$
apluser@ubuntu22-1:~$ cat /etc/systemd/system/jenkins.service.d/override.conf
[Service]
Environment="JENKINS_PORT=8082"
apluser@ubuntu22-1:~$
- 重新启动
bash
# 重新启动
apluser@ubuntu22-1:~$ sudo systemctl daemon-reload
apluser@ubuntu22-1:~$
apluser@ubuntu22-1:~$ sudo systemctl restart jenkins
# 再次确认
apluser@ubuntu22-1:~$ systemctl show jenkins | grep JENKINS_PORT
Environment=JENKINS_HOME=/var/lib/jenkins JENKINS_WEBROOT=/var/cache/jenkins/war JAVA_OPTS=-Djava.awt.headless=true JENKINS_PORT=8082
apluser@ubuntu22-1:~$
- 查看状态

- 可以看到,端口号已经发生了变化

3.2.3 修改JENKINS_HOME
JENKINS_HOME默认配置在jenkins.service,修改方式和端口号的修改方式相同,此处不进一步赘述。
bash
apluser@ubuntu22-1:~$ grep JENKINS_HOME /lib/systemd/system/jenkins.service
# $JENKINS_HOME, $JENKINS_LOG, and (if you have already run Jenkins)
Environment="JENKINS_HOME=/var/lib/jenkins"
# Note also that the particularly sensitive parts of $JENKINS_HOME (such as
apluser@ubuntu22-1:~$