温馨提示×

Ubuntu Jenkins如何进行容器化

小樊
33
2025-11-30 16:22:55
栏目: 智能运维

Ubuntu 上容器化部署 Jenkins 的完整实践

一 环境准备与安装 Docker

  • 更新系统并安装 Docker:
    • sudo apt update && sudo apt install -y docker.io
    • sudo systemctl start docker && sudo systemctl enable docker
    • 验证:docker --version
  • 可选:将当前用户加入 docker 组以避免每次使用 sudo(重新登录后生效)
    • sudo usermod -aG docker $USER

二 快速启动方式

  • 使用 Docker 直接运行(适合快速体验)
    • 启动容器:
      • docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
    • 获取初始管理员密码:
      • docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
    • 访问:http://<服务器IP>:8080
  • 使用 Docker Compose(推荐,便于管理与扩展)
    • 创建目录与权限:
      • mkdir -p /opt/jenkins_home && sudo chown -R 1000:1000 /opt/jenkins_home
    • 创建 docker-compose.yml(示例):
      • version: ‘3.8’ services: jenkins: image: jenkins/jenkins:lts-jdk17 container_name: jenkins user: “1000” restart: unless-stopped ports: - “8080:8080” - “50000:50000” volumes: - /opt/jenkins_home:/var/jenkins_home environment: - TZ=Asia/Shanghai - JAVA_OPTS=-Xmx1024m -Xms512m
    • 启动:
      • docker compose up -d
    • 获取初始密码:
      • docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
    • 访问:http://<服务器IP>:8080

三 在容器内使用宿主机的 Docker(DinD 实践)

  • 目标:让 Jenkins Pipeline 中可直接执行 docker build/run 等命令
  • 方式 A(推荐,安全可控):挂载 Docker 套接字与客户端
    • 在 docker-compose.yml 的 volumes 增加:
        • /var/run/docker.sock:/var/run/docker.sock
        • /usr/bin/docker:/usr/bin/docker
    • 说明:
      • 通过套接字复用宿主机 Docker 引擎,无需在容器内运行 Docker 守护进程
      • 需确保挂载目录权限与容器内用户匹配(常见为 1000:1000
  • 方式 B(隔离更强):使用 Docker-in-Docker(DinD)
    • 需额外启动一个 Docker 服务容器,并通过自定义网络让 Jenkins 与其通信(复杂度更高,通常无特殊隔离需求不必采用)
  • 安全建议:
    • 避免在容器内以 root 长期运行 Jenkins(示例中可用 user: “1000” 或创建专用用户)
    • 若必须 root,务必限制权限与网络访问

四 初始化与安全加固

  • 首次访问与初始化
    • 打开 http://:8080,输入 initialAdminPassword
    • 选择安装推荐插件,创建管理员账户,完成设置
  • 防火墙与端口
    • 开放访问端口(示例):
      • sudo ufw allow 8080 && sudo ufw reload
  • 反向代理与 HTTPS
    • 使用 Nginx/Apache 反向代理并配置 Let’s Encrypt 证书,启用 HTTPS(推荐生产环境使用)
  • 基础加固
    • 修改默认端口(如将 8080 改为 8081
    • 启用强密码策略与登录安全(如限制失败登录、启用二步验证插件)

五 常见问题与排查

  • 目录权限错误
    • 现象:容器启动失败或无法写入数据
    • 处理:确保挂载目录属主为 1000:1000
      • sudo chown -R 1000:1000 /opt/jenkins_home
  • 无法访问 Web 界面
    • 现象:浏览器打不开
    • 处理:检查防火墙与云安全组是否放行 8080;确认容器运行:docker ps
  • 构建时报权限不足
    • 现象:Pipeline 中执行 docker/ssh/scp 失败
    • 处理:
      • 优先使用挂载 docker.sock 的方式,并以 1000 用户运行
      • 对目标主机配置 SSH 免密登录,并在 Jenkins 凭证中正确配置
  • 查看日志定位问题
    • docker logs jenkins 或 docker compose logs -f

0