3967 字
20 分钟
Jenkins (1):入门启航篇 —— 从零搭建你的第一个 Jenkins 服务

第1篇:入门启航篇 —— 从零搭建你的第一个 Jenkins 服务#

在软件开发的世界里,编写代码只是万里长征的第一步,如何将代码安全、快速、稳定地部署到服务器上,才是考验一个团队工程化能力的关键。作为 DevOps 体系中的核心利器,Jenkins 几乎是每个后端开发和运维工程师的必修课。

本系列教程将带你从零开始,一步步解锁 Jenkins 的强大能力。作为第一篇“启航篇”,我们将用大白话讲透理论,并亲手完成 Jenkins 服务的搭建与第一个自动化任务。


一、开篇:为什么运维/开发都要学 Jenkins?#

1.1 大白话讲透什么是 CI/CD#

你肯定经常听到 CI/CD 这个高大上的缩写,全称是 Continuous Integration (持续集成) 和 Continuous Delivery/Deployment (持续交付/部署)。别被名词唬住,我们用大白话来解释:

  • CI(持续集成):就像是汽车流水线上的质检环节。多个程序员每天都在提交代码,CI 会自动把大家的代码拉取下来,自动编译、自动运行单元测试。一旦有人提交了有 Bug 的代码,系统立马亮红灯报警。它的核心目的是:尽早发现问题,防止代码在合并时发生冲突。
  • CD(持续交付/部署):就像是流水线上的打包发货环节。测试通过的代码,会自动打包成可执行文件(比如 Jar 包、Docker 镜像),甚至直接自动发布到测试环境或生产环境的服务器上。它的核心目的是:让软件随时保持可发布的状态,解放运维双手。

1.2 传统手工部署 vs CI/CD 自动化部署:痛点对比#

在没有 Jenkins 的年代,发布一个新版本通常是这样的:

维度传统手工部署模式(人肉运维)CI/CD 自动化部署模式
部署流程程序员本地打包 -> 登录服务器 -> 停服务 -> 备份 -> 传包 -> 重启程序员 push 代码 -> 自动触发构建、打包、部署、重启
耗时与效率每次发版耗时半小时以上,经常遇到环境不一致问题几分钟内全自动完成,环境高度一致
故障排查出现问题只能翻找服务器日志,回滚极度痛苦每次构建都有完整日志记录,支持一键回滚
协作体验开发求着运维发版,半夜经常被叫醒加班开发自己点个按钮就能发版,运维安心睡觉
核心价值

自动化部署不仅是为了“偷懒”,更是为了标准化和消除人为失误。机器不会因为疲劳而敲错命令,但人会。

1.3 Jenkins 是什么?为什么它是 CI/CD 的主流工具?#

Jenkins 是一个开源的、基于 Java 开发的持续集成工具。为什么在 GitLab CI、GitHub Actions、Drone CI 等众多现代工具层出不穷的今天,Jenkins 依然稳坐头把交椅?

  1. 极其恐怖的插件生态:拥有数千个插件,无论你是用 Git、SVN,还是想部署到 Docker、K8s、AWS、阿里云,甚至发个钉钉/微信通知,都有现成的插件支持。
  2. 极高的可定制性:通过 Pipeline(流水线)脚本,你可以把极度复杂的部署逻辑用代码写出来(Pipeline as Code)。
  3. 完全免费且成熟:经历了十几年的市场检验,遇到任何报错,搜索引擎上都能找到解决方案。

1.4 本系列学习路线 + 前置基础说明#

  • 学习路线:环境搭建(本篇) -> Freestyle 项目实战 -> Pipeline 流水线语法详解 -> 集成 Git/Maven/Docker 完整部署项目 -> 进阶分布式构建与权限管理。
  • 前置基础:需要你具备基本的 Linux 命令行操作知识,了解一点点 Docker 的基本概念。

二、环境搭建:三种安装方式,小白首选 Docker#

Jenkins 的安装非常灵活,这里提供三种主流方式。

2.1 前置环境要求#

  • 系统:Linux(推荐 CentOS/Ubuntu)、Windows 或 macOS。
  • 硬件配置:强烈建议至少 2GB 以上内存。Jenkins 基于 Java,运行时比较吃内存,1GB 内存的轻量云服务器极易出现 OOM(内存溢出)导致服务崩溃。

2.2 方式一:Docker 一键安装(推荐,零依赖踩坑少)#

这是目前最主流、最干净的安装方式,不污染宿主机环境,强烈推荐新手使用。

Docker 环境前置准备#

如果你的服务器还没安装 Docker,可以执行以下命令快速安装:

安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker

一键启动命令与参数详解#

我们不仅要启动容器,还要保证 Jenkins 的数据(比如配置、插件、构建历史)在容器销毁后不丢失,因此必须做数据持久化。

Docker 部署 Jenkins
# 1. 创建宿主机的数据挂载目录
mkdir -p /opt/jenkins_home
# 2. 赋予权限(极其重要!见下方警告)
chown -R 1000:1000 /opt/jenkins_home
# 3. 启动 Jenkins 容器
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-v /opt/jenkins_home:/var/jenkins_home \
-v /etc/localtime:/etc/localtime:ro \
--restart=always \
jenkins/jenkins:lts
新手第一坑:目录权限问题

在上述命令中,chown -R 1000:1000 /opt/jenkins_home 是绝对不能省略的! Docker 内 Jenkins 进程默认以 uid=1000 (jenkins 用户) 运行。如果你宿主机的目录是 root 创建的,容器内部将无法写入数据,导致启动失败并报错 Permission denied。

参数详解:

  • -p 8080:8080:映射 Web 访问端口。
  • -p 50000:50000:映射 Agent 代理节点通信端口(后期做集群分布式构建时会用到)。
  • -v /opt/jenkins_home:/var/jenkins_home:将容器内的 Jenkins 数据目录挂载到宿主机。
  • -v /etc/localtime:/etc/localtime:ro:让容器时间与宿主机时间保持一致。
  • jenkins/jenkins:lts:使用官方的长期支持版(Long-Term Support)镜像。

验证服务状态#

查看启动日志
docker logs -f jenkins

看到类似 Jenkins is fully up and running 的字样,说明启动成功。


2.3 方式二:Linux 系统直接安装(CentOS/Ubuntu)#

如果你不想用 Docker,也可以直接在 Linux 上安装。Jenkins 依赖 Java,所以必须先装 JDK。

Ubuntu/Debian 体系:

Ubuntu 安装 Jenkins
# 1. 安装 JDK 17 (Jenkins 新版要求 Java 11/17)
sudo apt update
sudo apt install -y openjdk-17-jre
# 2. 添加 Jenkins 官方密钥和源
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
# 3. 安装并启动
sudo apt update
sudo apt install -y jenkins
sudo systemctl enable --now jenkins

CentOS/RHEL 体系:

CentOS 安装 Jenkins
# 1. 安装 JDK 17
sudo yum install -y java-17-openjdk
# 2. 添加源
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# 3. 安装并启动
sudo yum install -y jenkins
sudo systemctl enable --now jenkins

2.4 方式三:Windows 本地安装(适合单机练习)#

如果你只是想在自己的 Windows 电脑上体验一下:

  1. 确保电脑已安装 JDK 17。
  2. 前往官网下载 jenkins.war 文件。
  3. 打开 CMD 或 PowerShell,进入 war 包所在目录,执行:
    Windows 启动 Jenkins
    java -jar jenkins.war --httpPort=8080
  4. 保持黑窗口不关闭,浏览器访问 http://localhost:8080 即可。

2.5 避坑指南:防火墙/端口放行常见问题#

无论使用哪种方式,如果启动成功但浏览器无法访问 http://你的IP:8080,99% 是防火墙问题。

  • 云服务器(阿里云/腾讯云等):必须在云控制台的“安全组”中,添加入方向规则,放行 8080 端口。
  • 本地虚拟机(CentOS firewalld):
    CentOS 放行端口
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --reload
  • 本地虚拟机(Ubuntu UFW):
    Ubuntu 放行端口
    ufw allow 8080/tcp

三、初始化全流程:第一次启动 Jenkins#

在浏览器输入 http://你的服务器IP:8080,迎接你的将是 Jenkins 的初始化向导。

3.1 解锁 Jenkins:获取初始管理员密码#

页面会提示你输入“管理员密码”(Administrator password)。为了证明你是服务器的主人,Jenkins 在首次启动时生成了一个随机密码存在文件中。

根据页面提示的路径(如果是 Docker 安装,则查看挂载的宿主机目录):

获取初始密码
# 如果是 Docker 安装
cat /opt/jenkins_home/secrets/initialAdminPassword
# 如果是 Linux 原生安装
cat /var/lib/jenkins/secrets/initialAdminPassword

将终端输出的这一长串字符复制,粘贴到网页中,点击“继续”。

3.2 插件安装选择:新手直接装「推荐插件」#

接下来会进入插件安装页面,有两个选项:

  • 安装推荐的插件(Install suggested plugins):新手无脑选这个,包含了绝大多数常用的基础插件(如 Git, Pipeline, SSH 等)。
  • 选择插件来安装(Select plugins to install):适合老手按需定制。

点击“安装推荐的插件”后,Jenkins 会开始下载。

避坑技巧:插件下载慢/大面积失败怎么办?

由于 Jenkins 的默认插件中心在国外,国内网络下载经常龟速甚至报错。 如果失败,可以刷新页面跳过插件安装,先进入系统。然后修改插件源:

  1. 进入 Manage Jenkins (系统管理) -> Plugins (插件管理) -> Advanced settings (高级)。
  2. 找到页面底部的 Update Site (升级站点)。
  3. 将 URL 替换为清华大学镜像源: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  4. 点击 Submit 提交后,回到服务器重启 Jenkins(docker restart jenkins 或 systemctl restart jenkins),再次安装即可快步如飞。

3.3 创建管理员账号 + 实例 URL 配置#

插件安装完成后:

  1. 创建第一个管理员用户:输入你的账号、密码、全名和邮箱。请务必记住这个账号,后续登录全靠它。
  2. 实例配置(Instance Configuration):系统会让你确认 Jenkins URL(通常就是 http://你的IP:8080/),保持默认点击“保存并完成”。
  3. 点击 “开始使用 Jenkins”,进入经典的 Jenkins Dashboard 控制台。

四、深度解剖:Jenkins 关键配置与目录结构#

在完成第一次启动并运行任务之后,很多新手会对 Jenkins “数据到底存在哪”、“配置在哪里修改”感到困惑。与其他数据库或中间件不同,Jenkins 几乎所有的配置、插件和构建历史都以纯文件的形式存储在文件系统中,这被称为 JENKINS_HOME。

无论你是通过 Docker(映射到 /opt/jenkins_home)还是 Linux 原生安装(默认在 /var/lib/jenkins),深入了解这个目录的结构,是后续做数据备份、环境迁移以及故障排查的核心基础。

4.1 JENKINS_HOME 核心目录速查表#

进入你的 Jenkins 数据挂载目录,使用 ls -la 可以看到非常多文件。以下是生产环境中你需要重点关注的核心目录和文件:

目录/文件名称核心作用运维实战指导
jobs/存储所有构建项目的数据。每个项目对应一个子文件夹,里面包含项目的 config.xml 以及历史构建记录(builds/ 文件夹)。如果要完全备份某个项目,直接打包这个项目对应的文件夹即可;如果磁盘空间满了,通常是里面的 builds/ 占用了太多空间。
plugins/存储已安装的所有插件(.jpi 或 .hpi 格式)。当你在离线环境安装 Jenkins 时,可以直接将正常环境的 plugins/ 目录整个拷贝过来重启生效,免去断网无法下载的痛苦。
workspace/存储项目拉取的源码和编译产物。这是 Jenkins 执行任务的“工作台”。注意:这里的数据是可以随时被清理的! 不要在这里长期存放重要数据。如果磁盘告警,可以直接清空该目录。
users/存储 Jenkins 自身维护的账号密码及用户配置文件(包含 API Token)。账号密码遗忘或者要做账号迁移时会涉及到此目录。
nodes/存储从节点(Slave/Agent)的配置文件。在分布式构建集群中,所有节点的定义参数都以 XML 形式保存在这里。
secrets/存储加密密钥文件(比如你第一次登录用到的 initialAdminPassword 就在这)。极其重要,切勿泄露或误删,丢失会导致 Jenkins 内部加密凭证(如存入的 Git 密码)全部失效。
config.xmlJenkins 系统的全局主配置文件。包含了全局安全设置、节点视图定义等。如果要用脚本做 Jenkins 自动化初始化,修改此文件是关键。

4.2 目录认知带来的运维启示#

万物皆文件的优势

因为 Jenkins 遵循“万物皆文件”的设计理念,所以在进行全量备份或服务器迁移时非常简单: 你只需要把整个 JENKINS_HOME 目录打包(tar -czvf jenkins_backup.tar.gz /opt/jenkins_home),扔到新服务器上解压,然后重新运行 Docker 容器并挂载该目录,你的 Jenkins 就能做到100% 无缝复原。


五、动手实操:你的第一个 Hello World 任务#

光说不练假把式,我们现在就来创建一个最简单的自动化任务,体验一下 Jenkins 的运行机制。

5.1 新建一个自由风格项目#

  1. 在 Jenkins 首页左侧菜单,点击 新建 Item (New Item)。
  2. 任务名称输入:My-First-HelloWorld。
  3. 选择 Freestyle project (构建一个自由风格的软件项目)。
  4. 点击底部的 确定 (OK)。

5.2 最简配置:添加 Shell 构建步骤#

进入任务的配置页面,向下滚动到 Build Steps (构建步骤) 区域:

  1. 点击 Add build step (增加构建步骤) 下拉菜单。
  2. 选择 Execute shell (执行 shell)。
  3. 在弹出的文本框中,输入一段简单的 Linux 命令:
    Shell 脚本
    echo "====================================="
    echo "Hello World! 欢迎来到 Jenkins 的世界!"
    echo "当前执行构建的用户是:"
    whoami
    echo "当前的工作目录是:"
    pwd
    echo "====================================="
  4. 点击页面最底部的 保存 (Save)。

5.3 手动触发构建#

回到任务面板,点击左侧的 Build Now (立即构建)。 你会发现在左下角的 Build History (构建历史) 中,瞬间多了一个 #1,并且旁边有一个小圆球(蓝色或绿色代表成功,红色代表失败)。

5.4 查看构建日志、解读构建结果#

点击 #1 旁边的成功小球,或者点击 #1 后在左侧选择 Console Output (控制台输出)。 你将看到类似如下的日志:

构建日志输出
Started by user Admin
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/My-First-HelloWorld
[My-First-HelloWorld] $ /bin/sh -xe /tmp/jenkins890123456.sh
+ echo =====================================
=====================================
+ echo Hello World! 欢迎来到 Jenkins 的世界!
Hello World! 欢迎来到 Jenkins 的世界!
+ echo 当前执行构建的用户是:
当前执行构建的用户是:
jenkins
+ pwd
当前的工作目录是:
/var/jenkins_home/workspace/My-First-HelloWorld
+ echo =====================================
=====================================
Finished: SUCCESS

日志解读:

  • Started by user Admin:记录了是谁触发了这次任务(方便追溯责任)。
  • Building in workspace:Jenkins 会为每个项目分配一个独立的工作空间目录(Workspace)。
  • 脚本执行过程及结果清晰可见,最后打印 Finished: SUCCESS 表示整个流水线毫无报错地执行完毕。

六、本篇核心知识点复盘#

恭喜你!到这里,你已经成功跨入了 CI/CD 的大门。让我们回顾一下本篇的核心收获:

  1. 思维转变:理解了 CI/CD 的核心是为了通过机器自动化,消除手工部署带来的低效与不确定性。
  2. 环境搭建:掌握了利用 Docker 快速拉起 Jenkins 服务的技巧,并重点避开了数据目录权限挂载的坑。
  3. 初始化避坑:学会了如何获取初始密码,以及在面对国内网络环境时如何替换插件更新源。
  4. 实战落地:成功创建了第一个自由风格任务,并掌握了如何通过“控制台输出”来排查和检视构建过程。

这只是一个起步。在实际的生产环境中,我们不可能只是打印 echo 语句。在下一篇教程中,我们将引入代码仓库管理,学习如何让 Jenkins 自动拉取 Git 仓库代码并进行编译打包,真正让自动化齿轮转动起来!敬请期待。

Jenkins (1):入门启航篇 —— 从零搭建你的第一个 Jenkins 服务
https://www.6ixblog.site/posts/jenkins-1/
作者
Licwic
发布于
2026-08-10
许可协议
CC BY-NC-SA 4.0