[software development] linux通过docker-compose部署jenkins
Tofloor
poster avatar
偷捧时间煮酒喝
deepin
6 hours ago
Author

Linux 环境 Docker Compose 部署 Jenkins 完整教程(含Docker权限、国内插件源适配)

一、教程概述

本教程适用于 Linux 服务器(CentOS/Ubuntu),基于 Docker Compose 快速部署 Jenkins LTS 长期支持版本,针对性解决国内 Linux 环境部署 Jenkins 的核心痛点:

  • Jenkins 容器内无宿主机 Docker 执行权限问题
  • 官方插件仓库签名认证导致国内镜像源失效、插件下载失败问题
  • 内置 JDK、Maven 环境挂载,支持 Java 项目编译构建

部署环境:Linux 服务器(CentOS/Ubuntu)、Docker & Docker Compose 已安装

二、前置环境准备

2.1 基础依赖

服务器已正常安装并启动 Docker、Docker Compose,可通过以下命令验证:

# 查看Docker版本
docker --version
# 查看Docker Compose版本
docker-compose --version

2.2 预准备环境文件

提前在宿主机创建对应目录、工具环境,用于容器挂载:

  1. JDK11 环境:宿主机路径 /home/cattle/Java/jdk-11.0.0.2,用于 Jenkins 内部 Java 项目编译
  2. Maven 3.9.6 环境:宿主机路径 /home/cattle/Java/apache-maven-3.9.6,用于 Maven 项目构建打包
  3. Jenkins 数据持久化目录:部署目录下创建 ./jenkins 文件夹,持久化 Jenkins 配置、任务、插件数据

2.3 获取宿主机Docker GID(关键)

为解决容器内 Docker 权限不足问题,需获取宿主机 Docker 分组 GID,执行以下命令:

grep docker /etc/group

执行结果示例:docker:x:986:,其中 986 即为 Docker 分组 GID,需填写到 docker-compose 配置的 group_add 参数中。

三、完整 Docker Compose 配置

在部署根目录创建 docker-compose.yml 文件,写入以下完整配置(已适配权限、时区、国内插件源、环境挂载):

version: '3.8'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    privileged: true
    ports:
      - "18080:8080"   # Jenkins web访问端口
      - "50000:50000" # Jenkins 代理节点通信端口
    environment:
      # 设置上海时区 + 关闭插件仓库签名校验(适配国内镜像源)
      - "JAVA_OPTS=-Duser.timezone=Asia/Shanghai -Dhudson.model.DownloadService.noSignatureCheck=true"
    volumes:
      # 挂载宿主机JDK11,容器内编译Java项目
      - "/home/cattle/Java/jdk-11.0.0.2:/var/jenkins_home/jdk-11"
      # 挂载宿主机Maven,容器内构建Maven项目
      - "/home/cattle/Java/apache-maven-3.9.6:/var/jenkins_home/apache-maven-3.9.6"
      # Jenkins数据持久化,防止容器删除数据丢失
      - "./jenkins:/var/jenkins_home"
      # 挂载Docker客户端命令,让容器内可执行docker指令
      - "/usr/bin/docker:/usr/bin/docker"
      # 挂载Docker通信套接字,容器与宿主机Docker引擎通信
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: always # 容器异常自动重启
    group_add:
      - 986 # 替换为自己宿主机的Docker GID(前文查询的数值)
    networks:
      - new

# 自定义网络
networks:
  new:
    driver: bridge

四、核心配置详细注意事项

4.1 Docker 权限适配(容器内可用Docker)

Jenkins 流水线构建、镜像打包、容器部署等场景需要在 Jenkins 容器内执行 Docker 命令,必须配置以下两项,否则会报权限拒绝 错误:

  1. 挂载Docker执行文件与通信套接字

    • /usr/bin/docker:/usr/bin/docker:将宿主机 Docker 客户端命令挂载到容器内,让容器拥有 docker 执行指令
    • /var/run/docker.sock:/var/run/docker.sock:Docker 守护进程通信文件,实现容器与宿主机 Docker 引擎交互,操作宿主机镜像、容器、网络
  2. 添加Docker分组GID通过 group_add: 986 将 Jenkins 容器进程加入宿主机 Docker 用户组,彻底解决容器操作 Docker 无权限问题,务必替换为自己服务器的Docker GID

4.2 插件仓库签名校验关闭(解决国内插件下载失败)

Jenkins 官方新版本开启了插件仓库签名认证机制,仅信任官方默认源,导致华为云、清华源等国内镜像源全部失效,插件无法下载。

配置参数说明:

-Dhudson.model.DownloadService.noSignatureCheck=true

该参数作用:关闭 Jenkins 对插件仓库配置文件的签名校验,允许自定义国内镜像源,是国内正常使用 Jenkins 插件的核心配置。

4.3 环境挂载说明

  • JDK挂载:容器内复用宿主机JDK11,适配Java项目编译,无需在容器内重复安装环境
  • Maven挂载:复用宿主机Maven3.9.6,统一构建环境、本地仓库缓存,提升构建速度
  • 数据目录挂载./jenkins:/var/jenkins_home 持久化所有Jenkins数据,容器重建、升级不丢失配置、任务、插件
  • Maven配置文件适配(关键):需从宿主机Maven目录中复制 settings.xml 配置文件到Jenkins持久化目录 ./jenkins 下,同时修改配置文件中的本地仓库路径,将其改为容器内部路径 /var/jenkins_home/apache-maven-3.9.6/repository,保证Jenkins构建项目时可正常读取Maven本地仓库、生效自定义镜像及配置,避免构建依赖拉取异常。

五、国内插件镜像源配置(关键步骤)

5.1 源替换原理

默认官方插件源:https://updates.jenkins.io/download(国外地址,访问慢、经常超时)

替换为华为云国内镜像源:https://mirrors.huaweicloud.com/jenkins

通过修改 Jenkins 插件中心配置文件 update-center.json,批量将官方下载地址替换为华为云国内镜像地址,实现插件高速下载。重要部署要求:Jenkins 的更新站点仅支持读取公网可访问的 HTTP/HTTPS 在线链接,无法读取本地文件。因此手动修改后的自定义 update-center.json 配置文件,必须上传托管至 Web 静态资源服务器、文件服务器、Gitee、GitHub 等可对外提供公开访问链接的平台。只有生成有效公网URL,Jenkins 才能远程拉取并加载自定义国内插件源配置。若你的服务器无外网访问权限、不方便自行部署托管文件,可直接使用我已永久托管在Gitee的成品配置链接,开箱即用。

5.2 直接使用现成国内配置文件

已提前手动定制修改好适配华为云镜像的配置文件,适配国内网络环境,若服务器无法访问外网、官方源访问异常,可直接使用该配置,无需手动修改源地址:

国内插件源配置文件地址https://raw.giteeusercontent.com/watermelon_peel/jenkins-update-center/raw/master/update-center.json

5.3 Jenkins 后台替换插件源步骤

  1. 启动 Jenkins 容器后,浏览器访问 http://服务器IP:18080,完成初始化解锁、管理员账号密码设置
  2. 进入后台:Manage Jenkins(系统管理) -> Plugin Manager(插件管理) ->Advanced(高级)
  3. 下滑找到 Update Site(更新站点) 配置项
  4. 删除原有默认地址,填入上述现成的国内 update-center.json 链接
  5. 点击Submit(提交),等待配置刷新,之后即可高速下载各类插件

六、启动与访问Jenkins

6.1 启动容器

docker-compose.yml 所在目录执行启动命令:

# 后台启动容器
docker-compose up -d

# 查看容器运行状态
docker-compose ps

# 查看启动日志(异常排查)
docker-compose logs -f jenkins

6.2 初始化解锁

首次访问需要解锁Jenkins,获取初始密码:

# 查看初始解锁密码
cat ./jenkins/secrets/initialAdminPassword

复制密码填入网页,完成初始化,建议跳过默认插件安装,配置完国内源后再手动安装插件。

七、常见问题排查

  • 容器内docker命令权限不足:检查 group_add 的GID是否与宿主机Docker分组一致,重启容器生效
  • 插件刷新失败/下载超时:确认已关闭签名校验参数、更新站点已替换为国内json配置文件
  • JDK/Maven环境不生效:检查宿主机目录路径是否正确、目录权限是否可读,重启Jenkins容器
  • 时区不对:确认 JAVA_OPTS 包含 Asia/Shanghai 时区配置

八、服务持久化与重启

  • 配置 restart: always,服务器重启、容器异常退出后会自动重启Jenkins服务
  • 所有配置、任务、插件数据均存储在 ./jenkins 目录,容器删除重建数据不丢失

(注:部分内容可能由 AI 生成)

本文全文下载链接

Reply Favorite View the author
All Replies
avatar
偷捧时间煮酒喝
deepin
6 hours ago
#1

自己测试的经验来这里存档备份一下。哈哈哈

Reply View the author