飞牛NAS搭建CI/CD流水线:Drone CI部署
飞牛NAS搭建CI/CD流水线:Drone CI部署
作为一名NAS玩家,飞牛NAS的Docker支持让我们能够轻松部署各类服务。本文将手把手教你如何在飞牛NAS上搭建Drone CI流水线,实现自动化构建、测试和部署。Drone CI是一款轻量级、基于容器的CI/CD工具,与GitHub/Gitea等代码仓库深度集成,非常适合NAS环境下的持续集成需求。
环境准备
在开始之前,请确保你的飞牛NAS满足以下条件: - 飞牛NAS已安装Docker和Docker Compose(飞牛系统默认支持) - 有一个可访问的Git代码仓库(推荐使用飞牛NAS自带的Gitea,或GitHub/GitLab) - 已安装SSH客户端(用于连接NAS终端)
第一步:创建Drone CI目录结构
通过SSH或飞牛NAS的终端功能登录系统,创建Drone CI相关目录:
mkdir -p /docker/drone
cd /docker/drone
第二步:准备Docker Compose配置
创建docker-compose.yml文件:
nano docker-compose.yml
填入以下内容(假设使用Gitea作为代码仓库):
version: '3'
services:
drone-server:
image: drone/drone:2
container_name: drone-server
ports:
- "3080:80" # 映射到NAS的3080端口,可根据需要修改
- "443:443" # 可选,HTTPS端口
volumes:
- ./data:/data
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
environment:
- DRONE_GITEA_SERVER=http://你的NAS_IP:3000 # Gitea地址
- DRONE_GITEA_CLIENT_ID=你的客户端ID
- DRONE_GITEA_CLIENT_SECRET=***
- DRONE_RPC_SECRET=***
- DRONE_SERVER_HOST=你的NAS_IP:3080
- DRONE_SERVER_PROTO=http
- DRONE_USER_CREATE=username:你的Gitea用户名,admin:true
drone-runner:
image: drone/drone-runner-docker:1
container_name: drone-runner
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=drone-server
- DRONE_RPC_SECRET=***
- DRONE_RUNNER_CAPACITY=2 # 并行构建数量
- DRONE_RUNNER_NAME=drone-runner-1
> 注意:DRONE_GITEA_CLIENT_ID和DRONE_GITEA_CLIENT_SECRET需要先在Gitea中创建OAuth应用获取。
第三步:在Gitea中创建OAuth应用
- 登录飞牛NAS的Gitea(默认端口3000)
- 进入【设置】→【应用】→【管理OAuth2应用】
- 创建新应用:
- 应用名称:Drone CI
- 重定向URI:
http://你的NAS_IP:3080/login - 保存后记录生成的
客户端ID和客户端密钥
第四步:启动Drone CI服务
在/docker/drone目录下执行:
docker-compose up -d
检查服务状态:
docker-compose ps
确保drone-server和drone-runner均为Up状态。
第五步:配置防火墙(如需外网访问)
如果希望从外网访问Drone CI面板,需要在飞牛NAS的防火墙中放行3080端口(或你自定义的端口): - 进入NAS管理后台 → 网络安全 → 防火墙 - 添加规则:允许TCP 3080端口
第六步:激活仓库并编写流水线
- 浏览器访问
http://你的NAS_IP:3080 - 使用Gitea账号登录Drone CI
- 点击【SYNC】同步仓库列表
- 找到需要启用CI的仓库,点击【ACTIVATE】
第七步:编写.drone.yml流水线文件
在项目仓库根目录创建.drone.yml文件,以下是一个Node.js项目的示例:
kind: pipeline
type: docker
name: default
steps:
- name: install
image: node:18-alpine
commands:
- npm install
- name: test
image: node:18-alpine
commands:
- npm run test
- name: build
image: node:18-alpine
commands:
- npm run build
- name: deploy
image: alpine
commands:
- apk add --no-cache rsync openssh
- rsync -avz --delete ./dist/ user@部署服务器:/var/www/html/
when:
branch:
- main # 仅在main分支触发部署
# 可选:配置Docker镜像构建
- name: docker-build
image: plugins/docker
settings:
repo: registry.example.com/my-app
tags: latest
registry: registry.example.com
username:
from_secret: docker_username
password:
from_secret: docker_password
when:
event:
- tag # 仅在打标签时触发
进阶配置:多Runner与缓存加速
如果项目较大,可以添加多个Runner并启用缓存:
# 在docker-compose.yml中添加第二个Runner
drone-runner-2:
image: drone/drone-runner-docker:1
container_name: drone-runner-2
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=drone-server
- DRONE_RPC_SECRET=***
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=drone-runner-2
在流水线中使用缓存卷:
steps:
- name: install
image: node:18-alpine
volumes:
- name: node_modules
path: /drone/src/node_modules
commands:
- npm install
volumes:
- name: node_modules
host:
path: /docker/drone/cache/node_modules
常见问题排查
问题1:无法连接Gitea
- 检查DRONE_GITEA_SERVER地址是否正确,确保NAS内部网络可达
- 确认OAuth应用的Client ID和Secret填写正确
问题2:Runner无法执行任务
- 检查/var/run/docker.sock权限:ls -la /var/run/docker.sock
- 确保DRONE_RPC_SECRET在server和runner中保持一致
问题3:构建日志显示权限不足
- 如果使用SSH部署,确保公钥已添加到目标服务器
- 检查Docker socket权限:sudo chmod 666 /var/run/docker.sock
总结
通过以上步骤,你已经在飞牛NAS上成功搭建了Drone CI流水线。这套方案的优势在于: - 轻量级:资源占用低,适合NAS环境 - 完全自托管:代码和构建数据都在本地,安全可控 - 扩展性强:可轻松添加多个Runner提升并发能力 - 与Gitea深度集成:飞牛NAS生态完美契合
现在,每当你向仓库提交代码,Drone CI会自动触发流水线,完成测试、构建和部署,真正实现“提交即部署”的自动化工作流。你可以根据项目需求自定义.drone.yml,支持多语言、多环境部署,让NAS成为你的私有云开发平台。
提示:建议定期备份/docker/drone/data目录,其中包含所有仓库配置和构建历史。
暂无评论,来说两句吧