jenkins部署

飞牛OS Docker 私有化部署 Jenkins 完整指南

在飞牛OS(NAS系统)的Docker中部署Jenkins,延续之前GitLab/Nexus的部署逻辑,重点适配NAS的存储路径、权限、端口冲突问题,提供可直接落地的步骤,同时规避新手常见的权限、插件安装失败等坑。

Jenkins是主流的持续集成/持续部署(CI/CD)工具,私有化部署后可对接之前部署的GitLab、Nexus,形成完整的研发流程闭环。


一、前置准备(必做,避坑核心)

1. 环境校验

  • 最低配置要求:CPU≥2核,内存≥4G(推荐8G,Jenkins插件/构建任务会占用大量内存),存储空间预留≥20G(构建产物、日志会持续增长)。
  • Docker服务确认:飞牛OS已安装并启动Docker,执行 docker --version 验证。
  • 端口规划与冲突检查
    Jenkins默认端口8080(Web)、50000(Agent通信),若之前GitLab占用了8080,需更换端口,推荐规划:
    宿主机端口 容器端口 用途
    8082 8080 Jenkins Web管理页
    50000 50000 Jenkins Agent节点通信
    端口占用检查(无输出即为可用):
    1
    2
    netstat -tulpn | grep 8082
    netstat -tulpn | grep 50000

2. 持久化目录创建与权限配置(核心,避免启动/插件安装报错)

Jenkins容器内默认使用 UID=1000GID=1000jenkins 用户运行,必须提前配置正确权限,否则会出现文件读写失败。

  1. 在飞牛OS存储池创建挂载目录(和GitLab/Nexus同路径,方便管理):

    1
    2
    3
    4
    # 进入docker目录
    cd /volume1/docker
    # 创建jenkins目录及子目录
    mkdir -p jenkins/data
  2. 核心权限配置(必须执行,适配飞牛OS权限机制):

    1
    2
    3
    4
    # 递归修改目录所有者为Jenkins容器内的用户(UID=1000)
    chown -R 1000:1000 /volume1/docker/jenkins
    # 配置读写权限
    chmod -R 755 /volume1/docker/jenkins
  3. 飞牛OS Web端权限补充:
    进入飞牛OS文件管理,找到 docker/jenkins 文件夹,右键→属性,给当前管理员用户、everyone 用户组开放读写权限(NAS Web端权限优先级高于命令行)。


二、部署方案(2选1,优先docker-compose)

方案1:docker-compose 部署(推荐,易维护、可扩展)

适合长期运行,支持后续添加插件、配置Agent节点,和之前的GitLab/Nexus部署习惯对齐。

  1. 进入jenkins目录:

    1
    cd /volume1/docker/jenkins
  2. 创建 docker-compose.yml 配置文件:

    1
    vi docker-compose.yml
  3. 粘贴以下完整配置(可直接使用,已适配飞牛OS):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    version: '3.8'
    services:
    jenkins:
    # 用官方LTS(长期支持版),避免最新版兼容性问题
    image: jenkins/jenkins:lts
    container_name: jenkins
    restart: always
    # 特权模式(适配飞牛OS Docker权限限制)
    privileged: true
    user: root # 避免宿主机文件权限问题,生产环境可改回1000
    ports:
    - "8082:8080" # Web端口(避开GitLab的8080)
    - "50000:50000" # Agent通信端口
    volumes:
    # 数据持久化挂载
    - ./data:/var/jenkins_home
    # 挂载宿主机Docker(让Jenkins能调用Docker命令构建镜像)
    - /var/run/docker.sock:/var/run/docker.sock
    # 挂载宿主机Docker二进制文件(可选,视飞牛OS路径调整)
    - /usr/bin/docker:/usr/bin/docker
    shm_size: '256m'
    environment:
    # 时区设置,和国内时间一致
    TZ: Asia/Shanghai
    # 跳过插件安装引导(可选,新手建议保留)
    JAVA_OPTS: "-Duser.timezone=Asia/Shanghai -Dhudson.model.DownloadService.noSignatureCheck=true"

    关键说明:user: root 是为了彻底规避飞牛OS的权限坑,若追求严格权限控制,可改回 1000:1000,但需确保所有挂载目录权限正确。

  4. 后台启动容器:

    1
    docker-compose up -d

方案2:docker run 快速部署(适合临时测试)

执行以下命令(替换路径为实际路径):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run -d \
--name jenkins \
--restart always \
--privileged=true \
-u root \
-p 8082:8080 \
-p 50000:50000 \
-v /volume1/docker/jenkins/data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
--shm_size 256m \
-e TZ=Asia/Shanghai \
-e JAVA_OPTS="-Duser.timezone=Asia/Shanghai -Dhudson.model.DownloadService.noSignatureCheck=true" \
jenkins/jenkins:lts

三、初始化与登录(核心步骤)

关键提醒:Jenkins首次启动需加载核心插件,耗时2-5分钟(根据NAS性能),请勿反复重启容器。

1. 查看启动状态与日志

1
2
# 实时查看日志,出现 "Jenkins is fully up and running" 即为初始化完成
docker logs -f jenkins

2. 获取初始管理员密码

Jenkins初始密码存放在容器内的 /var/jenkins_home/secrets/initialAdminPassword 文件中,执行以下命令获取:

1
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

复制输出的一串随机字符串(如 a1b2c3d4e5f67890),即为初始密码。

3. 访问与初始化配置

  1. 浏览器输入 http://192.168.1.201:2082,进入Jenkins解锁页面。
  2. 粘贴初始密码,点击「解锁Jenkins」。
  3. 插件安装选择:
    • 新手推荐「安装推荐的插件」(包含Git、Maven、Docker等核心插件);
    • 有经验可选择「选择插件来安装」,只勾选需要的插件。

      若插件安装失败:大概率是网络问题,可先跳过,后续配置国内镜像源再安装。

  4. 创建管理员用户:
    填写用户名、密码、邮箱(建议设置为 admin,方便记忆),完成后即可登录Jenkins。

四、飞牛OS环境关键优化(必做)

1. 配置插件国内镜像源(解决插件安装失败)

Jenkins默认插件源在国外,下载慢/失败,需替换为清华镜像:

  1. 登录Jenkins,进入「系统管理」→「插件管理」→「高级」。
  2. 在「升级站点」处,将默认URL替换为:
    1
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  3. 点击「提交」,重启Jenkins(容器层面:docker restart jenkins)。

2. 配置全局工具(对接GitLab/Nexus)

  1. 进入「系统管理」→「全局工具配置」:
    • JDK:新增JDK,取消「自动安装」,填写容器内JDK路径(默认 /usr/local/openjdk-11);
    • Git:新增Git,取消「自动安装」,填写路径 /usr/bin/git(容器内已预装);
    • Maven/Npm:按需配置,可选择自动安装,或挂载宿主机的工具路径。

3. 对接GitLab(拉取代码)

  1. 进入「系统管理」→「系统配置」→「GitLab」:
    • 点击「添加GitLab服务器」,填写名称(如 GitLab-飞牛OS);
    • 配置GitLab服务器URL(如 http://192.168.1.201:2080);
    • 添加「凭据」:选择「GitLab API令牌」,填写GitLab生成的个人访问令牌(GitLab内「个人设置」→「访问令牌」创建);
    • 点击「测试连接」,提示成功即配置完成。

4. 对接Nexus(推送制品)

在Jenkins构建任务中,通过Maven/Gradle命令配置Nexus仓库地址即可,示例Maven配置(pom.xml):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<repositories>
<repository>
<id>nexus-maven</id>
<url>http://192.168.1.2081/repository/maven-public/</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>nexus-release</id>
<url>http://192.168.1.2081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshot</id>
<url>http://192.168.1.2081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>

五、飞牛OS环境常见问题与解决方案

1. 启动报错:Permission denied(权限不足)

  • 核心原因:挂载目录所有者不是 1000:1000,或飞牛OS Web端权限未开放。
  • 解决方案:
    1
    2
    3
    4
    docker stop jenkins
    chown -R 1000:1000 /volume1/docker/jenkins/data
    chmod -R 777 /volume1/docker/jenkins/data
    docker start jenkins

2. 插件安装失败/页面加载慢

  • 核心原因:网络问题或镜像源未配置。
  • 解决方案:
    1. 配置清华镜像源(见上文);
    2. 手动下载插件(hpi 文件),进入「插件管理」→「高级」→「上传插件」安装。

3. Jenkins调用Docker命令报错:permission denied

  • 核心原因:docker.sock 权限不足。
  • 解决方案:
    1
    docker exec -it jenkins chmod 666 /var/run/docker.sock

4. 容器重启后配置丢失

  • 核心原因:挂载目录路径错误,或飞牛OS存储池只读。
  • 解决方案:
    1. 检查 docker-compose.ymlvolumes 路径是否正确;
    2. 飞牛OS Web端确认 jenkins/data 文件夹为「读写」权限。

总结

  1. Jenkins部署核心是权限配置(UID=1000)和端口避开冲突(用8082替代8080),飞牛OS需同时配置命令行和Web端权限;
  2. 优先使用 docker-compose 部署,配置 privileged: trueuser: root 可规避90%的权限坑;
  3. 插件安装失败时,先配置清华镜像源,再按需手动安装,可对接GitLab/Nexus形成完整CI/CD流程。

jenkins部署
https://cszy.top/20250821-jenkins部署/
作者
csorz
发布于
2025年8月21日
许可协议