当你兴冲冲去官网下载 Jenkins 的时候,发现还要装 JDK、配置 Tomcat、下载各种依赖……
这还没开始学呢,光是搭环境就要折腾半天,太劝退了!
别慌!今天咱用 Docker 来安装 Jenkins,一条命令搞定,妈妈再也不用担心我的环境配置了。
安装方式对比
在开始之前,咱先看看都有哪些安装方式:
对于学习来说,Docker 是最省心的选择。一个命令启动,出了问题是容器的问题,删掉重来就行,不会污染你的系统环境。
Docker Compose 一键部署
准备 docker-compose.yml
咱先创建一个 docker-compose.yml 文件:
version: '3.8'
services:
jenkins:
image: jenkins/jenkins:lts
container_name: my-jenkins
restart: unless-stopped
privileged: true
user: root
ports:
- "8080:8080"
- "50000:50000"
environment:
- JAVA_OPTS=-Xms512m -Xmx1024m
- TZ=Asia/Shanghai
volumes:
- jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
volumes:
jenkins_home:
driver: local来,咱解释一下关键配置:
1. 镜像选择
image: jenkins/jenkins:lts咱用的是 Jenkins 官方 LTS(长期支持)版本镜像,这个版本最稳定,适合生产环境也适合学习。
2. 端口映射
ports:
- "8080:8080"
- "50000:50000"8080:Jenkins 的 Web UI 访问端口50000:Jenkins Agent 通信端口(后面用分布式构建会用到)
3. JVM 参数
- JAVA_OPTS=-Xms512m -Xmx1024m设置 Java 虚拟机的初始内存和最大内存,防止 Jenkins 吃光你的内存。
4. 时区配置
- TZ=Asia/Shanghai这个很重要!不设置的话,Jenkins 里的时间会显示 UTC,和你本地时间差 8 小时,看着很别扭。
5. 数据持久化
volumes:
- jenkins_home:/var/jenkins_home把容器内的 /var/jenkins_home 目录映射到名为 jenkins_home 的 Docker volume。即使删除容器,数据也不会丢失,下次启动还能继续用。
6. Docker Socket 挂载
- /var/run/docker.sock:/var/run/docker.sock这个是可选的,如果你想在 Jenkins 里面构建 Docker 镜像,就需要挂载 Docker Socket。
启动 Jenkins
把上面的内容保存为 docker-compose.yml,然后在文件目录下执行:
docker-compose up -d等待几秒钟,Jenkins 就启动啦!
查看一下容器状态:
docker-compose ps看到 Up 状态就说明启动成功了:
NAME IMAGE COMMAND SERVICE CREATED STATUS
my-jenkins jenkins/jenkins:lts "/usr/bin/tini -- /usr…" jenkins 5 seconds ago Up 4 seconds解锁 Jenkins
好了,现在打开浏览器,访问 http://localhost:8080
你会看到一个"Unlock Jenkins"的页面:
Unlock Jenkins
Please wait while Jenkins is getting ready...
Your instance is probably running in the background.
Use your administrator password to unlock Jenkins.
Administrator password: _______
You can also:
- Use your own password file: /var/jenkins_home/secrets/initialAdminPassword咱需要拿到这个初始密码。回到终端,执行:
docker exec my-jenkins cat /var/jenkins_home/secrets/initialAdminPassword复制输出的密码,粘贴到页面的输入框里,点击"Continue"。
安装推荐插件
解锁之后,会进入插件安装页面。咱选择"Install suggested plugins"(安装推荐插件),这个选项会安装最常用的插件,对于学习来说完全够用了。
安装过程可能需要几分钟,取决于你的网络速度。
创建管理员账号
插件安装完成后,会让你创建第一个管理员账号:
Create First Admin User
Username: admin
Password: ********
Confirm password: ********
Full name: 云恒
E-mail address: admin@example.com填好信息后点击"Save and Continue"。
首次配置
好,现在咱来进行一些基础的配置。
全局安全配置
进入"Manage Jenkins" -> "Configure Global Security":
1. 关闭匿名访问
在"Access Control" -> "Authorization"里,选择"Logged-in users can do anything"
或者如果你想让某些项目对匿名用户只读,可以选择"Matrix-based security"进行细粒度配置
2. 配置授权策略
对于学习环境,选择"Anyone can do anything"最简单
但如果是公司内网,建议配置具体的用户权限
全局工具配置(新手必看!)
💡 全局工具配置就是告诉 Jenkins:"我的 JDK、Maven、Git、Docker 装在哪了,版本是多少"。Pipeline 构建时会用到这些工具。如果这里没配好,后面跑流水线就会报 "tool not found" 之类的错误。
进入 Manage Jenkins → Tools(老版本叫 "Global Tool Configuration"):
1. JDK 配置
JDK 是 Java 项目的运行基础,Jenkins 本身就跑在 JDK 上,但构建项目时可能需要指定特定版本。
方式一:让 Jenkins 自动安装(推荐新手用)
点击 Add JDK
填写名称:
JDK17(名称自己定,Pipeline 里会引用这个名字)取消勾选 Install automatically(国内网络自动安装经常失败)
填写 JAVA_HOME:
# 先进容器看看 JDK 装在哪
docker exec my-jenkins echo $JAVA_HOME
# 通常输出:/opt/java/openjdk把输出的路径填到 JAVA_HOME 里即可。
方式二:手动安装指定版本 JDK
如果你的项目需要特定版本(比如 JDK 8),需要自己装:
# 进入容器
docker exec -it my-jenkins bash
# 以安装 JDK 8 为例(Adoptium/Temurin)
cd /opt
curl -LO https://mirrors.tuna.tsinghua.edu.cn/Adoptium/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_8u422b05.tar.gz
tar -xzf OpenJDK8U-jdk_x64_linux_hotspot_8u422b05.tar.gz
mv jdk8u422-b05 jdk8
# 验证
/opt/jdk8/bin/java -version
# 输出:openjdk version "1.8.0_422"然后在 Jenkins 里添加 JDK,名称填 JDK8,JAVA_HOME 填 /opt/jdk8。
⚠️ 常见坑:JAVA_HOME 路径不要带
/bin!错误:/opt/jdk8/bin,正确:/opt/jdk8
2. Maven 配置
如果你的项目是 Maven 项目(大部分 Java 后端都是),需要配置 Maven。
方式一:让 Jenkins 自动安装(推荐)
点击 Add Maven
填写名称:
Maven3勾选 Install automatically
选择版本:
3.9.6(选最新的 3.x 版本即可)
Jenkins 会在第一次使用 Maven 时自动下载安装。
方式二:手动安装
# 进入容器
docker exec -it my-jenkins bash
# 下载 Maven(用清华镜像加速)
cd /opt
curl -LO https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.16/binaries/apache-maven-3.9.16-bin.tar.gz
tar -xzf apache-maven-3.9.16-bin.tar.gz
# 验证
/opt/apache-maven-3.9.16/bin/mvn -version然后在 Jenkins 里添加 Maven,名称填 Maven3,MAVEN_HOME 填 /opt/apache-maven-3.9.16。
如果依旧无法运行mvn命令,需要在Jenkins全局配置里设环境变量(推荐)
进入 Manage Jenkins → System
找到 Global properties → 勾选 Environment variables
添加:
Name:
MAVEN_HOME,Value: 你的Maven安装路径(比如/opt/apache-maven-3.9.6)Name:
PATH+EXTRA,Value:$MAVEN_HOME/bin注意:
PATH+EXTRA是Jenkins的特殊语法,表示追加到PATH,不会覆盖原有路径
保存后,重新运行Job,
mvn -version就能用了
配置 Maven settings.xml(国内依赖加速)
Maven 默认从中央仓库下载依赖,国内很慢,需要配置阿里云镜像:
# 进入容器
docker exec -it my-jenkins bash
# 创建 settings.xml
mkdir -p /var/jenkins_home/.m2
cat > /var/jenkins_home/.m2/settings.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
EOF3. Git 配置
Git 是代码版本管理工具,Jenkins 构建时需要用它来拉取代码。
好消息:Jenkins Docker 镜像自带 Git,通常不需要额外配置!
验证一下:
docker exec my-jenkins git --version
# 输出类似:git version 2.39.2如果能看到版本号,说明 Git 已经可用了。在 Jenkins 的 Tools 页面,Git 那一栏会自动检测到路径,一般不用改。
如果你需要配置 Git 凭证(拉私有仓库代码时用):
进入 Manage Jenkins → Credentials → System → Global credentials
点击 Add Credentials
选择类型:
Username with password:GitLab/GitHub 的用户名+密码
SSH Username with private key:用 SSH Key 方式(更安全,推荐)
4. Docker 配置
如果你的 Pipeline 需要构建 Docker 镜像(比如打镜像推到仓库),需要配置 Docker。
我们的 docker-compose.yml 已经挂载了 Docker Socket,所以 Jenkins 可以直接使用宿主机的 Docker。
验证一下:
# 在 Jenkins 容器内执行 docker 命令
docker exec my-jenkins docker version如果能看到 Docker 版本信息,说明配置成功!
如果提示 docker: not found,说明容器里没装 Docker CLI,需要手动装:
# 进入容器
docker exec -it my-jenkins bash
# 安装 Docker CLI(注意:只装客户端,不需要装 Docker Daemon)
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo $VERSION_CODENAME) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce-cli
# 验证
docker version工具配置汇总速查表
💡 新手建议:先把 JDK 和 Maven 配好,Git 和 Docker 基本能直接用。后面写 Pipeline 的时候如果报错 "tool not found",再回来检查对应的工具配置。
系统配置
进入"Manage Jenkins" -> "Configure System":
1. 执行者数量
默认是 2,表示最多同时跑 2 个构建
如果你的机器性能不错,可以调大一些
2. 工作空间根目录
默认是
/var/jenkins_home/workspace如果需要修改,可以在这里配置
3. 通知设置
配置邮件服务器,这样构建失败时可以发邮件通知你
常见问题
好,咱来聊聊安装过程中容易遇到的问题。
问题一:端口冲突
问题描述:Bind for 0.0.0.0:8080 failed: port is already allocated
原因:8080 端口被其他程序占用了。
解决方案:
方法 1:查找并关闭占用端口的程序
# Windows
netstat -ano | findstr :8080
# Linux/Mac
lsof -i :8080方法 2:修改 docker-compose.yml 中的端口映射
ports:
- "8081:8080" # 把宿主机的 8081 映射到容器的 8080问题二:权限不足
问题描述:Permission denied 或 EACCES 错误
原因:挂载的目录没有写入权限。
解决方案:
# 修改目录权限
sudo chown -R 1000:1000 ./jenkins_home或者在 docker-compose.yml 中使用 user: root 并添加 privileged: true。
问题三:插件安装失败
问题描述:"Unable to connect to Jenkins" 或插件安装一直转圈
原因:网络问题或插件源配置错误。
解决方案:
配置国内镜像源(前面已经讲过了)
检查网络连接
重启 Jenkins
docker-compose restart
问题四:忘记管理员密码怎么办?
问题描述:忘了 Jenkins 的管理员密码,无法登录
解决方案:
方法 1:通过 Docker 进入容器重置
docker exec -it my-jenkins bash
# 进入容器后,执行:
cat /var/jenkins_home/secrets/initialAdminPassword然后重新走一遍解锁流程。
方法 2:修改配置绕过认证
docker exec -it my-jenkins bash
# 编辑 config.xml
vi /var/jenkins_home/config.xml
# 找到 <authorizationStrategy> 标签,把内容改成:
<hudson.security.AuthorizationMatrixProperty>
</hudson.security.AuthorizationMatrixProperty>
# 找到 <securityRealm> 标签,改成:
<hudson.security.HudsonPrivateSecurityRealm_-Details>
<allowsSignup>false</allowsSignup>
</hudson.security.HudsonPrivateSecurityRealm_-Details>
# 保存后重启
exit
docker-compose restart重启后可以用 admin 账户(如果还存在的话),或者需要重新创建管理员。
问题五:Jenkins 启动很慢或卡在启动页面
问题描述:访问 http://localhost:8080 一直显示 "Please wait while Jenkins is getting ready..."
原因:可能是内存不足或第一次启动正在下载插件。
解决方案:
等待几分钟让它完成初始化
检查 Docker 日志
docker-compose logs -f增加 JVM 内存配置
environment: - JAVA_OPTS=-Xms1024m -Xmx2048m
实操练习:用 Docker 部署一个可用的 Jenkins 实例
好了,理论讲完了,咱来动手实操!
任务目标
用 Docker Compose 在本地部署一个 Jenkins 实例,并完成以下验收标准:
验收标准
容器成功启动:执行
docker-compose up -d后,容器状态为UpWeb UI 可访问:浏览器打开
http://localhost:8080能看到 Jenkins 页面成功解锁:使用初始密码解锁 Jenkins
插件安装完成:安装推荐插件成功
管理员账号创建:成功创建管理员并登录
创建第一个任务:新建一个简单的 FreeStyle 任务,配置 Git 仓库并成功执行一次构建
挑战任务
完成基础任务后,尝试以下挑战:
配置中文界面:把 Jenkins 语言改成中文(安装 Localization: Chinese (Simplified) 插件)
配置邮件通知:配置 QQ 邮箱或网易邮箱的 SMTP,测试构建失败时能否收到邮件
配置中文时区:确保 Jenkins 显示的时间和本地时间一致
小结
咱来回顾一下今天学到的:
Docker 是安装 Jenkins 的最佳方式,一条命令搞定,环境隔离,易于管理
docker-compose.yml 关键配置:镜像、端口、JVM 参数、时区、数据持久化
首次配置步骤:解锁 Jenkins → 安装插件 → 创建管理员 → 配置插件源 → 全局配置
常见问题:端口冲突、权限不足、插件安装失败、忘记密码
实操验收:完成 Jenkins 部署并创建第一个构建任务