Ubuntu 系统使用 Docker 部署 Jenkins 详细教程

Jenkins 是一款开源的自动化服务器工具,基于 Java 开发 ,用于实现持续集成(CI)和持续交付(CD),广泛应用于软件开发领域。其核心价值在于通过自动化构建、测试和部署流程,帮助开发团队提高效率、提升软件质量,并促进团队协作。

核心功能与特点

  1. 持续集成(CI)
    • 自动触发构建:Jenkins 可根据代码仓库(如 Git、SVN)的提交事件或预定义时间表,自动拉取最新代码并执行构建。
    • 早期问题发现:通过频繁构建和自动化测试,快速定位代码缺陷,降低修复成本。
    • 系统健康检查:持续监控代码质量,减少发布风险。
  2. 持续交付(CD)
    • 自动化部署:将通过测试的代码自动部署到预生产环境,支持更广泛的验证。
    • 缩短发布周期:与配置管理工具(如 Ansible、Chef)集成,实现快速、可靠的部署流程。
  3. 分布式构建
    • 并行处理:支持多节点并行构建,显著提升构建速度,尤其适用于大型项目。
    • 资源优化:合理分配计算资源,避免单点瓶颈。
  4. 插件生态系统
    • 功能扩展:拥有超过 1,800 个插件,覆盖版本控制(Git、SVN)、构建工具(Maven、Gradle)、测试框架(JUnit、Selenium)、部署工具(Docker、Kubernetes)等。
    • 定制化需求:用户可根据项目需求选择插件,或开发自定义插件。
  5. 可视化界面与操作
    • 直观管理:提供 Web 界面,支持任务配置、构建历史查看、状态监控等。
    • 脚本支持:兼容 Groovy、Shell 等脚本语言,满足复杂自动化需求。
  6. 消息通知与报告
    • 实时反馈:通过 RSS、Email 通知构建结果,生成 JUnit/TestNG 测试报告。
    • 数据可视化:以图表形式展示构建趋势和稳定性,辅助决策。

应用场景

  1. Web/移动应用开发:自动化构建、测试和部署,确保快速迭代。
  2. 嵌入式系统:管理硬件相关代码的持续集成,提升开发效率。
  3. DevOps 实践:作为核心工具,连接开发、测试和运维环节,实现高效协作。

优势与价值

  1. 开源免费:降低企业成本,支持社区驱动的功能迭代。
  2. 跨平台支持:兼容 Windows、Linux、macOS 等操作系统。
  3. 易用性与灵活性:提供多种安装方式(如 WAR 包、Docker 容器),支持快速部署。
  4. 社区支持:庞大用户社区提供技术支持、经验分享和插件共享。

典型工作流程

  1. 代码提交:开发者将代码推送至 Git 仓库。
  2. 自动触发:Jenkins 检测到变更后,拉取代码并执行构建。
  3. 自动化测试:运行单元测试、集成测试,生成测试报告。
  4. 部署验证:将通过测试的代码部署至预生产环境,进行进一步验证。
  5. 反馈与修复:根据测试结果反馈问题,开发者快速修复并重新提交。

常见问题与解决方案

  1. 端口冲突:修改 Jenkins 配置文件中的端口号。
  2. 内存不足:增加 JVM 内存或优化系统资源。
  3. 构建失败:检查日志,定位代码编译错误或测试用例问题。
  4. 权限问题:配置 SSH 密钥或调整服务用户权限。
  5. 插件冲突:检查插件版本兼容性,按规范安装/升级。

总结

Jenkins 通过自动化构建、测试和部署流程,结合持续集成和持续交付的最佳实践,成为 DevOps 领域的关键工具。它不仅提升了软件交付速度和质量,还促进了团队协作和持续改进的文化。对于追求高效开发和稳定交付的团队而言,Jenkins 是一个不可或缺的选择。

一、环境准备

点击安装 Docker

二、创建 Jenkins 工作目录

复制代码
mkdir -p ~/jenkins && cd ~/jenkins  # 创建项目目录
mkdir jenkins_home                  # 创建 Jenkins Home 目录(将挂载为 /var/jenkins_home)
chown -R 1000:1000 jenkins_home     # 设置权限(Jenkins 容器默认用户为 jenkins,UID=1000)

三、编写 docker-compose.yml 文件

复制代码
nano docker-compose.yml

粘贴以下内容:

复制代码
version: '3.8'

services:
  jenkins:
    image: jenkins/jenkins:lts  # 使用长期支持版本
    container_name: jenkins
    ports:
      - "8080:8080"    # Web 访问端口
      - "50000:50000"  # 用于 Jenkins Agent 通信
    volumes:
      - ./jenkins_home:/var/jenkins_home          # 持久化 Jenkins 数据
      - /var/run/docker.sock:/var/run/docker.sock # 允许 Jenkins 调用宿主机 Docker
      - /usr/bin/docker:/usr/bin/docker           # 挂载 Docker CLI(可选)
    restart: unless-stopped
    privileged: true  # 启用特权模式(构建 Docker 镜像需要)
    network_mode: bridge
    environment:
      JAVA_OPTS: "-Djenkins.install.runSetupWizard=true"
    user: "1000:1000"  # 匹配宿主机 jenkins_home 权限

🔍 说明

  • jenkins/jenkins:lts:官方 LTS 镜像,稳定可靠
  • 挂载 docker.sock:允许 Jenkins 在容器内构建和推送 Docker 镜像
  • restart: unless-stopped:服务器重启后自动启动
  • user: 1000:1000:避免权限问题

四、启动 Jenkins 容器

复制代码
docker compose up -d     # 启动服务

五、初始化 Jenkins

  • 打开浏览器访问:http://<你的服务器IP>:8080

  • 获取初始管理员密码:

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

  • 粘贴密码,进入设置向导。

  • 选择插件

    • 推荐选择 "Install suggested plugins"(安装推荐插件)
    • 常见插件会自动安装:Git、Pipeline、SSH、Docker Pipeline 等
  • 创建第一个管理员用户(建议记录用户名和密码)

  • 设置 Jenkins URL(如 http://ci.yourcompany.comhttp://<IP>:8080

  • 完成安装。

七、常见问题排查

问题 解决方案
容器启动失败 检查目录权限:chown -R 1000:1000 jenkins_home
无法调用 Docker 确认 /var/run/docker.sock 已挂载,且用户在 docker
插件安装慢 更换为清华源
构建报错权限问题 docker-compose.yml 中添加 privileged: true

八、后续扩展建议

  • 集成 GitLab/GitHub Webhook:实现代码提交自动触发构建
  • 使用 Pipeline as Code :通过 Jenkinsfile 管理 CI/CD 流程
  • 对接 Kubernetes:使用 Kubernetes Plugin 动态创建构建节点
  • 迁移到 Helm + K8s:适用于大规模集群管理

通过以上步骤,一个稳定、安全、可维护的企业级 Jenkins CI/CD 平台已成功部署。它不仅为团队提供了自动化的构建与交付能力,也为持续集成文化的落地奠定了坚实基础。自动化之路从此启程,让每一次代码变更都高效、可靠、可追溯。

相关推荐
学传打活1 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng1689 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心12 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552717 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552718 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝19 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552719 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552720 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552722 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552723 天前
Java I/O核心操作实战
人工智能·1024程序员节