Docker 玩法

飞牛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_IDDRONE_GITEA_CLIENT_SECRET需要先在Gitea中创建OAuth应用获取。

第三步:在Gitea中创建OAuth应用

  1. 登录飞牛NAS的Gitea(默认端口3000)
  2. 进入【设置】→【应用】→【管理OAuth2应用】
  3. 创建新应用:
  4. 应用名称:Drone CI
  5. 重定向URI:http://你的NAS_IP:3080/login
  6. 保存后记录生成的客户端ID客户端密钥

第四步:启动Drone CI服务

/docker/drone目录下执行:

docker-compose up -d

检查服务状态:

docker-compose ps

确保drone-serverdrone-runner均为Up状态。

第五步:配置防火墙(如需外网访问)

如果希望从外网访问Drone CI面板,需要在飞牛NAS的防火墙中放行3080端口(或你自定义的端口): - 进入NAS管理后台 → 网络安全 → 防火墙 - 添加规则:允许TCP 3080端口

第六步:激活仓库并编写流水线

  1. 浏览器访问http://你的NAS_IP:3080
  2. 使用Gitea账号登录Drone CI
  3. 点击【SYNC】同步仓库列表
  4. 找到需要启用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目录,其中包含所有仓库配置和构建历史。

💬 评论区
发表评论

暂无评论,来说两句吧