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 平台已成功部署。它不仅为团队提供了自动化的构建与交付能力,也为持续集成文化的落地奠定了坚实基础。自动化之路从此启程,让每一次代码变更都高效、可靠、可追溯。

相关推荐
wkj00111 小时前
uv run python main.py和python main.py的区别?
1024程序员节
长欢喜一场11 小时前
高精度算法全解析:从原理到实现
c++·1024程序员节
m0_7482336411 小时前
单调栈详解【C/C++】
c语言·c++·算法·1024程序员节
励志成为糕手11 小时前
Hive数据仓库:架构原理与实践指南
大数据·数据仓库·hive·1024程序员节·hql
Gee Explorer11 小时前
第一篇使用HTML写一个随机点名网页
css·html5·1024程序员节
奶酪博士11 小时前
【html】每日打卡页面
html·1024程序员节
Monly2111 小时前
HTML:Video视频切换时不重新加载
1024程序员节
兜兜风d'11 小时前
RabbitMQ 高级特性:消息确认机制详解
spring boot·分布式·rabbitmq·java-rabbitmq·1024程序员节
charlie11451419111 小时前
HTML 理论笔记
开发语言·前端·笔记·学习·html·1024程序员节