当前位置: 首页 > article >正文

使用 Docker Compose 部署 Jenkins(LTS 版)持续集成环境

一、前言

Jenkins 是目前最流行的开源持续集成工具之一。本教程将手把手带你使用 Docker Compose 快速部署 Jenkins LTS(长期支持版本),同时保留数据持久化、Docker 命令转发等功能,适合用于生产或本地开发测试环境。


二、环境准备

确保你的 Linux 系统中已安装以下软件:

  • Docker(建议 20.x+)
  • Docker Compose(建议 2.x+)

检查版本:

docker -v
docker compose version

三、创建目录结构

mkdir -p ~/jenkins-docker
cd ~/jenkins-docker# 创建用于数据持久化的目录
mkdir -p /home/jenkins

建议将 /home/jenkins 权限赋给非 root 用户,例如当前用户:

sudo chown -R 1000:1000 /home/jenkins

其中 1000:1000 是 Jenkins 容器中的默认运行用户 ID。


四、创建 docker-compose.yml

~/jenkins-docker 目录下创建 docker-compose.yml 文件:

services:jenkins:image: jenkins/jenkins:lts  # 使用官方 LTS 版本container_name: jenkinsuser: "1000:1000"ports:- "8080:8080"     # Jenkins Web UI- "50000:50000"   # JNLP Agent 通信端口volumes:- /home/jenkins:/var/jenkins_home         # 持久化 Jenkins 数据- /var/run/docker.sock:/var/run/docker.sock  # 容器内访问宿主机 Dockerrestart: unless-stopped

五、启动 Jenkins

执行以下命令启动 Jenkins:

docker compose up -d

首次启动后,你可以访问 Jenkins Web UI:

http://<你的IP>:8080

查看初始管理员密码:

cat /home/jenkins/secrets/initialAdminPassword

复制后粘贴进浏览器完成首次配置(安装插件等)。


六、常用命令

操作命令
启动 Jenkinsdocker compose up -d
查看日志docker compose logs -f
停止 Jenkinsdocker compose down
进入容器内部docker exec -it jenkins bash

七、常见问题与建议

  1. 权限问题:
    如果 Jenkins 容器内出现权限错误,确保挂载目录 /home/jenkins 的属主为 1000:1000

  2. 容器内无法使用 docker 命令:
    因为 /var/run/docker.sock 被挂载到容器内,你可以安装 Docker CLI:

    docker exec -it jenkins bash
    apt update && apt install docker.io -y
    
  3. 数据备份:
    定期备份 /home/jenkins 目录,以防数据丢失。


八、总结

通过本文你已经成功使用 Docker Compose 部署了 Jenkins LTS 环境。这种方式不仅便于管理,还可以轻松迁移与扩展。

如需进一步配合 GitLab、Maven、Nexus 或 Kubernetes 进行 CI/CD,可以在 Jenkins 安装相关插件并配置流水线。

http://www.lryc.cn/news/2403238.html

相关文章:

  • Java调用大模型API实战指南
  • C#中的路由事件(Routed Events)
  • [蓝桥杯]通电
  • 单片机0-10V电压输出电路分享
  • 从零开始,搭建一个基于 Django 的 Web 项目
  • 大模型模型部署和暴露接口
  • 2025服装收银系统推荐:智能管理助力服装商家高效经营
  • Microsoft Copilot Studio - 尝试一下Agent
  • 【Python 算法零基础 4.排序 ⑨ 堆排序】
  • Deepseek/cherry studio中的Latex公式复制到word中
  • 测试设计技术全解析:黑盒与白盒测试的七种武器与覆盖率指标
  • AWS中国区IAM相关凭证自行管理策略(只读CodeCommit版)
  • 极限复习c++
  • 32单片机——窗口看门狗
  • javascript中Cookie、BOM、DOM的使用
  • IDEA 中 Undo Commit,Revert Commit,Drop Commit区别
  • DAY43打卡
  • Leetcode 1892. 页面推荐Ⅱ
  • 进程——环境变量及程序地址空间
  • (4-point Likert scale)4 点李克特量表是什么
  • 亚矩阵云手机实测体验:稳定流畅背后的技术逻辑​
  • VR视频制作有哪些流程?
  • NodeJS全栈WEB3面试题——P2智能合约与 Solidity
  • 某水表量每15分钟一报,然后某天示数清0了,重新报示值了 ,如何写sql 计算每日水量
  • Ubuntu 系统部署 MySQL 入门篇
  • 【MATLAB代码】制导——平行接近法,三维,目标是运动的,订阅专栏后可直接查看MATLAB源代码
  • 大模型安全测试报告:千问、GPT 全系列、豆包、Claude 表现优异,DeepSeek、Grok-3 与 Kimi 存在安全隐患
  • vue3 按钮级别权限控制
  • vue3子组件获取并修改父组件的值
  • 【Redis】Cluster集群