温馨提示×

Jenkins部署Ubuntu的最佳实践

小樊
36
2025-12-18 10:06:25
栏目: 智能运维

一 环境与架构规划

  • 操作系统与版本:优先选择 Ubuntu 22.04/24.04 LTS,内核与软件包支持更稳定。
  • Java 运行时:安装 OpenJDK 11 或 17(LTS),两者均为当前主流长期支持版本。
  • 资源基线:
    • 测试环境建议 4 核 CPU / 8GB 内存 / 50GB SSD
    • 生产环境建议 8 核 CPU / 16GB 内存 / 100GB SSD
    • 规模扩大时采用 Master–Agent 分离 架构,Master 专注调度与治理,Agent 承载构建与部署负载。
  • 部署方式:
    • 传统系统包部署(便于与系统工具链集成);
    • Docker 部署(隔离性好、迁移便捷,注意卷与权限配置)。

二 安装与初始化

  • 安装 Java
    • Ubuntu/Debian:sudo apt update && sudo apt install -y openjdk-11-jdk(或 openjdk-17-jdk)
  • 添加 Jenkins 官方仓库(推荐 GPG 与签名方式)
    • Ubuntu 22.04/24.04 推荐:
      • wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io.key
      • echo “deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/” | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
      • sudo apt update && sudo apt install -y jenkins
  • 启动与开机自启
    • sudo systemctl enable --now jenkins
    • sudo systemctl status jenkins(确认状态为 active (running)
  • 防火墙放行
    • UFW:sudo ufw allow 8080/tcp;如需 JNLP 代理 通信,放行 50000/tcp
  • 首次访问与初始化
    • 访问:http://<服务器IP或域名>:8080
    • 初始管理员密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    • 插件安装:可选择 Install suggested plugins;国内环境可在插件管理的高级选项中将 Update Site 替换为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 以加速

三 安全加固与访问控制

  • 启用全局安全
    • Manage Jenkins → Configure Global Security:勾选 Enable security
    • 身份认证:优先使用 Jenkins 自有用户数据库 或对接 LDAP/OAuth
    • 授权策略:采用 Project-based Matrix Authorization StrategyRole-Based Strategy,遵循最小权限原则;
    • 保持 CSRF 保护 开启。
  • 加密与反向代理
    • 使用 Nginx/Apache 作为反向代理并启用 HTTPS/TLS
    • 示例 Nginx 关键配置:将 80 重定向至 443,443 反向代理至 http://localhost:8080,并设置头部:
      • proxy_set_header Host $host;
      • proxy_set_header X-Real-IP $remote_addr;
      • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      • proxy_set_header X-Forwarded-Proto $scheme;
    • 如看到 “Reverse proxy set up is broken”,检查 proxy_pass 与 proxy_redirect 配置。
  • 端口与暴露面
    • 仅暴露必要端口(如 443),限制 808050000 的访问来源;
    • 定期更新 Jenkins 与插件,及时修补漏洞。

四 构建环境与代理配置

  • 系统与工具链
    • 在 Manage Jenkins → Global Tool Configuration 中配置 JDK、Git、Maven/Gradle 等工具路径;
    • 使用 Jenkinsfile(Pipeline as Code) 管理流水线,推荐安装 Pipeline、Blue Ocean 等插件提升可视化与可维护性。
  • Docker 场景(系统包或容器部署均适用)
    • 容器内使用宿主 Docker(DinD 或挂载 Docker 套接字):
      • volumes: /var/run/docker.sock:/var/run/docker.sock
      • 注意容器内用户权限(常见为 UID 1000),确保对挂载目录具备读写权限;
      • 如遇到权限问题,可在宿主机将 jenkins 用户加入 docker 组并重启服务(谨慎评估安全影响)。
  • SSH 与凭据
    • 生成 SSH 密钥对 用于 Git/目标服务器访问;
    • 在 Jenkins 凭据管理中添加 SSH Username with private key 等凭据,避免在代码中明文存放密钥。

五 运维、备份与高可用

  • 日志与监控
    • 查看服务日志:sudo journalctl -u jenkins -f;
    • 结合系统监控(如资源、构建队列、执行时长)与构建日志分析性能瓶颈。
  • 备份与恢复
    • 定期备份 /var/lib/jenkins(含 jobs、config、plugins、secrets 等);
    • 采用全量+增量策略,定期演练恢复流程,确保 RPO/RTO 达标。
  • 高可用与扩展
    • 生产环境建议 Master–Agent 多节点部署,Master 不跑构建任务;
    • 通过 Kubernetes 或云厂商弹性节点扩展构建能力,结合 动态代理 提升资源利用率与弹性。

0