主题
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访问 http://<服务器地址>:8080。首次启动时获取初始化密码:
bash
docker compose exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword在初始化页面填写密码,随后安装所需插件并创建管理员账户。
更新
更新前先备份 jenkins_home。为了获得一致的备份,备份期间停止 Jenkins:
bash
cd ~/apps/jenkins
docker compose stop jenkins
docker compose run --rm backup
docker compose start jenkins拉取新的 LTS 镜像并重建容器:
bash
docker compose pull
docker compose up -d
docker compose logs --tail 100 jenkins构建节点
Jenkins Controller 主要负责调度,不建议同时承担大量构建任务。构建环境应放在独立 Agent 中,便于隔离工具链和限制权限。
不要默认将宿主机 /var/run/docker.sock 挂载到 Controller。访问该 Socket 通常等同于获得宿主机 root 级控制能力。需要构建容器镜像时,优先使用隔离的 Agent,并根据环境选择受控的远程 Docker Engine、Docker-in-Docker 或专用构建工具。
