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
2netstat -tulpn | grep 8082
netstat -tulpn | grep 50000
2. 持久化目录创建与权限配置(核心,避免启动/插件安装报错)
Jenkins容器内默认使用 UID=1000、GID=1000 的 jenkins 用户运行,必须提前配置正确权限,否则会出现文件读写失败。
在飞牛OS存储池创建挂载目录(和GitLab/Nexus同路径,方便管理):
1
2
3
4# 进入docker目录
cd /volume1/docker
# 创建jenkins目录及子目录
mkdir -p jenkins/data核心权限配置(必须执行,适配飞牛OS权限机制):
1
2
3
4# 递归修改目录所有者为Jenkins容器内的用户(UID=1000)
chown -R 1000:1000 /volume1/docker/jenkins
# 配置读写权限
chmod -R 755 /volume1/docker/jenkins飞牛OS Web端权限补充:
进入飞牛OS文件管理,找到docker/jenkins文件夹,右键→属性,给当前管理员用户、everyone用户组开放读写权限(NAS Web端权限优先级高于命令行)。
二、部署方案(2选1,优先docker-compose)
方案1:docker-compose 部署(推荐,易维护、可扩展)
适合长期运行,支持后续添加插件、配置Agent节点,和之前的GitLab/Nexus部署习惯对齐。
进入jenkins目录:
1
cd /volume1/docker/jenkins创建
docker-compose.yml配置文件:1
vi docker-compose.yml粘贴以下完整配置(可直接使用,已适配飞牛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
26version: '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,但需确保所有挂载目录权限正确。后台启动容器:
1
docker-compose up -d
方案2:docker run 快速部署(适合临时测试)
执行以下命令(替换路径为实际路径):
1 | |
三、初始化与登录(核心步骤)
关键提醒:Jenkins首次启动需加载核心插件,耗时2-5分钟(根据NAS性能),请勿反复重启容器。
1. 查看启动状态与日志
1 | |
2. 获取初始管理员密码
Jenkins初始密码存放在容器内的 /var/jenkins_home/secrets/initialAdminPassword 文件中,执行以下命令获取:
1 | |
复制输出的一串随机字符串(如 a1b2c3d4e5f67890),即为初始密码。
3. 访问与初始化配置
- 浏览器输入
http://192.168.1.201:2082,进入Jenkins解锁页面。 - 粘贴初始密码,点击「解锁Jenkins」。
- 插件安装选择:
- 新手推荐「安装推荐的插件」(包含Git、Maven、Docker等核心插件);
- 有经验可选择「选择插件来安装」,只勾选需要的插件。
若插件安装失败:大概率是网络问题,可先跳过,后续配置国内镜像源再安装。
- 创建管理员用户:
填写用户名、密码、邮箱(建议设置为admin,方便记忆),完成后即可登录Jenkins。
四、飞牛OS环境关键优化(必做)
1. 配置插件国内镜像源(解决插件安装失败)
Jenkins默认插件源在国外,下载慢/失败,需替换为清华镜像:
- 登录Jenkins,进入「系统管理」→「插件管理」→「高级」。
- 在「升级站点」处,将默认URL替换为:
1
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json - 点击「提交」,重启Jenkins(容器层面:
docker restart jenkins)。
2. 配置全局工具(对接GitLab/Nexus)
- 进入「系统管理」→「全局工具配置」:
- JDK:新增JDK,取消「自动安装」,填写容器内JDK路径(默认
/usr/local/openjdk-11); - Git:新增Git,取消「自动安装」,填写路径
/usr/bin/git(容器内已预装); - Maven/Npm:按需配置,可选择自动安装,或挂载宿主机的工具路径。
- JDK:新增JDK,取消「自动安装」,填写容器内JDK路径(默认
3. 对接GitLab(拉取代码)
- 进入「系统管理」→「系统配置」→「GitLab」:
- 点击「添加GitLab服务器」,填写名称(如
GitLab-飞牛OS); - 配置GitLab服务器URL(如
http://192.168.1.201:2080); - 添加「凭据」:选择「GitLab API令牌」,填写GitLab生成的个人访问令牌(GitLab内「个人设置」→「访问令牌」创建);
- 点击「测试连接」,提示成功即配置完成。
- 点击「添加GitLab服务器」,填写名称(如
4. 对接Nexus(推送制品)
在Jenkins构建任务中,通过Maven/Gradle命令配置Nexus仓库地址即可,示例Maven配置(pom.xml):
1 | |
五、飞牛OS环境常见问题与解决方案
1. 启动报错:Permission denied(权限不足)
- 核心原因:挂载目录所有者不是
1000:1000,或飞牛OS Web端权限未开放。 - 解决方案:
1
2
3
4docker stop jenkins
chown -R 1000:1000 /volume1/docker/jenkins/data
chmod -R 777 /volume1/docker/jenkins/data
docker start jenkins
2. 插件安装失败/页面加载慢
- 核心原因:网络问题或镜像源未配置。
- 解决方案:
- 配置清华镜像源(见上文);
- 手动下载插件(
hpi文件),进入「插件管理」→「高级」→「上传插件」安装。
3. Jenkins调用Docker命令报错:permission denied
- 核心原因:
docker.sock权限不足。 - 解决方案:
1
docker exec -it jenkins chmod 666 /var/run/docker.sock
4. 容器重启后配置丢失
- 核心原因:挂载目录路径错误,或飞牛OS存储池只读。
- 解决方案:
- 检查
docker-compose.yml中volumes路径是否正确; - 飞牛OS Web端确认
jenkins/data文件夹为「读写」权限。
- 检查
总结
- Jenkins部署核心是权限配置(UID=1000)和端口避开冲突(用8082替代8080),飞牛OS需同时配置命令行和Web端权限;
- 优先使用
docker-compose部署,配置privileged: true和user: root可规避90%的权限坑; - 插件安装失败时,先配置清华镜像源,再按需手动安装,可对接GitLab/Nexus形成完整CI/CD流程。