2. 用 Docker 搭建 Jenkins 环境

_

当你兴冲冲去官网下载 Jenkins 的时候,发现还要装 JDK、配置 Tomcat、下载各种依赖……

这还没开始学呢,光是搭环境就要折腾半天,太劝退了!

别慌!今天咱用 Docker 来安装 Jenkins,一条命令搞定,妈妈再也不用担心我的环境配置了。

安装方式对比

在开始之前,咱先看看都有哪些安装方式:

安装方式

推荐指数

优点

缺点

Docker(推荐)

5 星

一键部署、环境隔离、易清理、跨平台

需要了解 Docker

直接安装(war/rpm/deb)

3 星

传统方式、性能好

配置繁琐、不易迁移

Kubernetes Helm

4 星

企业级、高可用

需要 K8s 集群、学习成本高

Windows Installer

2 星

Windows 用户友好

平台限制、配置复杂

对于学习来说,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 JenkinsTools(老版本叫 "Global Tool Configuration"):

1. JDK 配置

JDK 是 Java 项目的运行基础,Jenkins 本身就跑在 JDK 上,但构建项目时可能需要指定特定版本。

方式一:让 Jenkins 自动安装(推荐新手用)

  1. 点击 Add JDK

  2. 填写名称:JDK17(名称自己定,Pipeline 里会引用这个名字)

  3. 取消勾选 Install automatically(国内网络自动安装经常失败)

  4. 填写 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 自动安装(推荐)

  1. 点击 Add Maven

  2. 填写名称:Maven3

  3. 勾选 Install automatically

  4. 选择版本: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全局配置里设环境变量(推荐)

  1. 进入 Manage Jenkins → System

  2. 找到 Global properties → 勾选 Environment variables

  3. 添加:

    • Name: MAVEN_HOME,Value: 你的Maven安装路径(比如 /opt/apache-maven-3.9.6

    • Name: PATH+EXTRA,Value: $MAVEN_HOME/bin

      注意:PATH+EXTRA 是Jenkins的特殊语法,表示追加到PATH,不会覆盖原有路径

  4. 保存后,重新运行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>
EOF

3. Git 配置

Git 是代码版本管理工具,Jenkins 构建时需要用它来拉取代码。

好消息:Jenkins Docker 镜像自带 Git,通常不需要额外配置!

验证一下:

docker exec my-jenkins git --version
# 输出类似:git version 2.39.2

如果能看到版本号,说明 Git 已经可用了。在 Jenkins 的 Tools 页面,Git 那一栏会自动检测到路径,一般不用改

如果你需要配置 Git 凭证(拉私有仓库代码时用):

  1. 进入 Manage JenkinsCredentialsSystemGlobal credentials

  2. 点击 Add Credentials

  3. 选择类型:

    • 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

✅ 自带 JDK 17

填 JAVA_HOME

/opt/java/openjdk

JAVA_HOME 不要带 /bin

Maven

❌ 需配置

自动安装或手动安装

名称 + MAVEN_HOME

别忘了配阿里云镜像

Git

✅ 自带

一般不用改

自动检测路径

私有仓库需要配 Credentials

Docker

⚠️ 需挂载 Socket

docker-compose 已配

Socket 挂载

容器内无 docker 命令需手动装 CLI

💡 新手建议:先把 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 deniedEACCES 错误

原因:挂载的目录没有写入权限。

解决方案

# 修改目录权限
sudo chown -R 1000:1000 ./jenkins_home

或者在 docker-compose.yml 中使用 user: root 并添加 privileged: true

问题三:插件安装失败

问题描述:"Unable to connect to Jenkins" 或插件安装一直转圈

原因:网络问题或插件源配置错误。

解决方案

  1. 配置国内镜像源(前面已经讲过了)

  2. 检查网络连接

  3. 重启 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..."

原因:可能是内存不足或第一次启动正在下载插件。

解决方案

  1. 等待几分钟让它完成初始化

  2. 检查 Docker 日志

    docker-compose logs -f
  3. 增加 JVM 内存配置

    environment:
      - JAVA_OPTS=-Xms1024m -Xmx2048m

实操练习:用 Docker 部署一个可用的 Jenkins 实例

好了,理论讲完了,咱来动手实操!

任务目标

用 Docker Compose 在本地部署一个 Jenkins 实例,并完成以下验收标准:

验收标准

  1. 容器成功启动:执行 docker-compose up -d 后,容器状态为 Up

  2. Web UI 可访问:浏览器打开 http://localhost:8080 能看到 Jenkins 页面

  3. 成功解锁:使用初始密码解锁 Jenkins

  4. 插件安装完成:安装推荐插件成功

  5. 管理员账号创建:成功创建管理员并登录

  6. 创建第一个任务:新建一个简单的 FreeStyle 任务,配置 Git 仓库并成功执行一次构建

挑战任务

完成基础任务后,尝试以下挑战:

  1. 配置中文界面:把 Jenkins 语言改成中文(安装 Localization: Chinese (Simplified) 插件)

  2. 配置邮件通知:配置 QQ 邮箱或网易邮箱的 SMTP,测试构建失败时能否收到邮件

  3. 配置中文时区:确保 Jenkins 显示的时间和本地时间一致

小结

咱来回顾一下今天学到的:

  1. Docker 是安装 Jenkins 的最佳方式,一条命令搞定,环境隔离,易于管理

  2. docker-compose.yml 关键配置:镜像、端口、JVM 参数、时区、数据持久化

  3. 首次配置步骤:解锁 Jenkins → 安装插件 → 创建管理员 → 配置插件源 → 全局配置

  4. 常见问题:端口冲突、权限不足、插件安装失败、忘记密码

  5. 实操验收:完成 Jenkins 部署并创建第一个构建任务

1. CI/CD 是什么?为什么需要 Jenkins? 2026-05-27
3. 创建第一个 Freestyle 项目 2026-05-27

评论区