跳到主要内容

Docker 部署 Jenkins

本文是一份独立的 Jenkins 控制器容器部署参考。示例只运行 Jenkins 控制器,不直接授予其宿主 Docker 管理权限;构建执行器和容器镜像构建应按安全边界另行设计。

版本与前置条件

  • 安装 Docker Engine 与 Docker Compose v2。
  • 本文示例固定为 Jenkins LTS 2.568.2-lts-jdk21,便于复现。部署前应查看 Jenkins Java 支持策略和镜像标签,选择仍受支持的 LTS 补丁版本。
  • 为小型团队准备至少 4 GB 内存和足够的工作区、制品与日志空间。
  • 生产环境应使用反向代理、可信 TLS 证书、外部身份源或严格的本地账号策略。

Compose 部署

.env

JENKINS_VERSION=2.568.2-lts-jdk21

compose.yaml

services:
jenkins:
image: jenkins/jenkins:${JENKINS_VERSION}
restart: unless-stopped
ports:
- "127.0.0.1:8080:8080"
environment:
JAVA_OPTS: "-Djava.awt.headless=true"
volumes:
- jenkins-home:/var/jenkins_home

volumes:
jenkins-home:
name: jenkins-home

默认不暴露 TCP Agent 端口 50000。只有确实使用 inbound agent,并已配置防火墙和 Jenkins 安全策略时才开放该端口。

启动服务:

docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=200 jenkins

首次初始化

获取一次性初始化密码:

docker compose exec jenkins \
cat /var/jenkins_home/secrets/initialAdminPassword

然后访问 http://127.0.0.1:8080,完成以下设置:

  1. 安装经过评估的最小插件集合。
  2. 创建独立管理员账号,并禁用共享账号。
  3. 配置 Jenkins URL、凭据存储和授权策略。
  4. 在反向代理上启用 HTTPS 后再允许远程访问。

健康与验证

curl --head --fail http://127.0.0.1:8080/login
docker compose ps
docker compose logs --since=10m jenkins
docker stats

/login 返回成功响应只说明 Web 入口可用。还应创建一个无敏感信息的测试任务,验证队列、执行器、制品保存和通知链路。

不要直接挂载 Docker Socket

/var/run/docker.sock 挂载到 Jenkins 控制器,等同于把宿主机的高权限 Docker API 交给能运行流水线的用户或插件。基础部署不应这样配置,也不应把 Docker TCP API 以无 TLS 的 2375 端口暴露出去。

需要构建容器镜像时,优先考虑:

  • 使用隔离的 Jenkins Agent,并限制其凭据、网络和工作区权限。
  • 使用短生命周期构建节点或受控的远程构建服务。
  • 若采用 Docker-in-Docker,使用 TLS、独立网络和专用数据卷,并按 Jenkins 官方方案评估 privileged 风险。

持久化与备份

全部 Jenkins 配置、插件元数据、任务和凭据存放在 jenkins-home 卷。备份前先停止新构建,并确保 Jenkins 处于静止状态;对正在变化的目录直接打包可能得到不一致备份。

停止后可使用只读挂载导出卷:

docker compose stop jenkins
docker run --rm \
-v jenkins-home:/source:ro \
-v "$PWD:/backup" \
alpine:3.22 \
tar -czf /backup/jenkins-home-backup.tgz -C /source .
docker compose start jenkins

备份文件包含敏感凭据,应加密、限制访问并保存在独立位置。恢复流程必须在隔离环境中定期演练。

升级

  1. 查看 Jenkins LTS 升级指南、Java 要求和插件兼容性。
  2. 停止构建并完成可恢复备份。
  3. .env 改为明确的 LTS 补丁版本,不使用 latest
  4. 执行 docker compose pull && docker compose up -d
  5. 检查启动日志、插件状态、登录和测试任务。

跨越多个 LTS 基线时,应按官方升级路径逐步升级,不要直接跳到目标版本。

停止与清理

# 删除容器和网络,保留 Jenkins 数据
docker compose down

# 查看相关数据卷
docker volume ls --filter name=jenkins

只有确认加密备份可恢复且不再需要实例时,才执行 docker compose down --volumes

官方资料