主题
Jenkins
部署选择
Jenkins 官方同时支持 Linux 包管理器安装和容器安装。本文使用 Docker 部署 Jenkins Controller,便于隔离 Java 运行环境,并通过镜像统一升级和回滚方式。
Jenkins 的配置、插件、凭据和任务数据都位于 /var/jenkins_home。容器可以重建,该目录必须持久化。
Docker Compose
创建部署目录:
bash
# 准备部署目录
mkdir -p ~/apps/jenkins # 创建部署目录
cd ~/apps/jenkins # 进入部署目录创建 compose.yml:
yaml
services:
jenkins:
image: jenkins/jenkins:lts-jdk21
container_name: jenkins
restart: unless-stopped
ports:
- '8080:8080'
# 仅使用入站 TCP Agent 时开放
# - '50000:50000'
volumes:
- jenkins_home:/var/jenkins_home
backup:
image: alpine
profiles:
- tools
volumes:
- jenkins_home:/var/jenkins_home:ro
- ./:/backup
command:
- tar
- -czf
- /backup/jenkins_home.tar.gz
- -C
- /var/jenkins_home
- .
volumes:
jenkins_home:
name: jenkins_home使用 Docker 命名卷可以避免宿主机目录与容器内 jenkins 用户之间的权限冲突。只有需要直接管理数据文件时,才考虑 bind mount,并显式将目录所有者设置为容器使用的 UID。
启动
bash
# 启动服务
docker compose up -d # 后台创建并启动服务
# 状态与日志
docker compose ps # 查看服务状态
docker compose logs --tail 100 jenkins # 查看最近 100 行日志访问 http://<服务器地址>:8080。首次启动时获取初始化密码:
bash
# 账户初始化
# 查看初始化密码
docker compose exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword在初始化页面填写密码,随后安装所需插件并创建管理员账户。
更新
更新前先备份 jenkins_home。为了获得一致的备份,备份期间停止 Jenkins:
bash
# 准备部署目录
cd ~/apps/jenkins # 进入部署目录
# 备份与恢复运行
docker compose stop jenkins # 停止 Jenkins,确保备份一致
docker compose run --rm backup # 备份数据卷,完成后移除临时容器
docker compose start jenkins # 备份后恢复 Jenkins拉取新的 LTS 镜像并重建容器:
bash
# 更新服务
docker compose pull # 拉取配置标签的最新镜像
docker compose up -d # 后台创建并启动服务
# 状态与日志
docker compose logs --tail 100 jenkins # 查看最近 100 行日志构建节点
Jenkins Controller 主要负责调度,不建议同时承担大量构建任务。构建环境应放在独立 Agent 中,便于隔离工具链和限制权限。
不要默认将宿主机 /var/run/docker.sock 挂载到 Controller。访问该 Socket 通常等同于获得宿主机 root 级控制能力。需要构建容器镜像时,优先使用隔离的 Agent,并根据环境选择受控的远程 Docker Engine、Docker-in-Docker 或专用构建工具。
