- 使用 Drone 和 Gogs 搭建自托管 CI/CD 平台完整指南
本文详细介绍了如何使用 Drone 和 Gogs 搭建完整的自托管 CI/CD 平台,包括环境准备、Docker Compose 部署、服务配置、Webhook 集成、构建流水线配置以及自动化部署的完整流程,帮助开发者构建轻量级但功能强大的 DevOps 工具链。
使用 Drone 和 Gogs 搭建自托管 CI/CD 平台完整指南
前言
Drone 是一个基于容器的本地持续交付平台,与 Jenkins 功能类似但更加轻量级。配合轻量级的 Gogs 作为 Git 管理系统,两者都基于 Golang 开发,非常适合需要自托管 CI/CD 解决方案的团队。
本文将详细介绍如何搭建一个完整的 Drone + Gogs CI/CD 平台,实现从代码提交到自动化部署的完整工作流。
一、系统架构和组件介绍
1. 架构概览
┌─────────────────────────────────────────────────────────────────────────────────┐
│ CI/CD Platform Architecture │
├─────────────────────────────────────────────────────────────────────────────────┤
│ Web Browser │
├─────────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ Nginx (Reverse Proxy) │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ Gogs (3000) │ │ Drone (8080) │ │ │
│ │ │ - Git Repository│ │ - CI/CD Pipeline│ │ │
│ │ │ - User Management│ │ - Build Agent │ │ │
│ │ │ - Web Interface│ │ - Webhook │ │ │
│ │ └─────────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ Docker Infrastructure │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │ MySQL (3308) │ │Drone Agent(9000)│ │Docker-in-Docker │ │ │
│ │ │ - Gogs Database │ │ - Build Runner │ │ - Build Environment│ │ │
│ │ │ - User Data │ │ - Pipeline │ │ - Container Build│ │ │
│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────┘
2. 核心组件
Gogs
- 轻量级 Git 服务:自托管 Git 仓库管理系统
- 易部署:单一二进制文件,配置简单
- 功能完整:支持仓库管理、用户管理、Webhook
- 资源占用低:相比 GitLab 更加轻量
Drone
- 容器化 CI/CD:基于 Docker 的持续集成平台
- Pipeline 配置:通过 YAML 文件定义构建流程
- 插件生态:丰富的插件支持各种构建和部署需求
- 易于扩展:支持自定义插件和配置
MySQL
- 数据存储:Gogs 的数据库后端
- 用户数据:存储用户信息、仓库元数据
- 持久化:确保数据安全和一致性
二、环境准备
1. 系统要求
硬件配置
# 检查系统资源
free -h # 内存检查 (建议至少 4GB)
df -h # 磁盘空间检查 (建议至少 20GB)
nproc # CPU 核心数检查
软件依赖
# 检查 Docker 版本
docker --version
docker-compose --version
# 检查 Git 版本
git --version
# 检查网络连接
ping -c 4 google.com
2. 安装 Docker 和 Docker Compose
Ubuntu/Debian 系统
# 更新包索引
apt update
# 安装 Docker 依赖
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
apt-get update
apt-get install -y docker-ce docker-ce-cli docker-compose-plugin
# 启动 Docker 服务
systemctl start docker
systemctl enable docker
# 将当前用户添加到 docker 组
usermod -aG docker $USER
CentOS/RHEL 系统
# 安装依赖
yum install -y yum-utils
# 添加 Docker 仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
yum install -y docker-ce docker-ce-cli docker-compose-plugin
# 启动 Docker 服务
systemctl start docker
systemctl enable docker
3. 创建项目目录
# 创建项目目录
mkdir -p /opt/cicd-platform
cd /opt/cicd-platform
# 创建数据目录
mkdir -p {data/{gogs,mysql,drone},logs}
# 设置权限
chmod -R 755 /opt/cicd-platform
chown -R $USER:$USER /opt/cicd-platform
三、Docker Compose 配置
1. 完整的 docker-compose.yml
version: '3'
services:
drone-server:
image: drone/drone:latest
container_name: drone-server
restart: unless-stopped
ports:
- "8080:80"
- "8843:443"
- "9000:9000"
volumes:
- ./data/drone:/var/lib/drone/
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DRONE_OPEN=true
- DRONE_SERVER_HOST=drone-server
- DRONE_DEBUG=true
- DRONE_GIT_ALWAYS_AUTH=false
- DRONE_GOGS=true
- DRONE_GOGS_SKIP_VERIFY=false
- DRONE_GOGS_SERVER=http://gogs:3000
- DRONE_PROVIDER=gogs
- DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
- DRONE_DATABASE_DRIVER=sqlite3
- DRONE_SERVER_PROTO=http
- DRONE_RPC_SECRET=ALQU2M0KdptXUdTPKcEw
- DRONE_SECRET=ALQU2M0KdptXUdTPKcEw
networks:
- cicd-network
depends_on:
- gogs
gogs:
image: gogs/gogs:latest
container_name: gogs
restart: unless-stopped
ports:
- "10022:22"
- "3000:3000"
volumes:
- ./data/gogs:/data
environment:
- TZ=Asia/Shanghai
networks:
- cicd-network
depends_on:
- mysql
mysql:
image: mysql:5.7.16
container_name: mysql
restart: unless-stopped
volumes:
- ./data/mysql:/var/lib/mysql
- /var/run/docker.sock:/var/run/docker.sock
ports:
- "3308:3306"
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: gogs
MYSQL_USER: gogs
MYSQL_PASSWORD: pass
TZ: Asia/Shanghai
networks:
- cicd-network
drone-agent:
image: drone/agent:latest
container_name: drone-agent
restart: unless-stopped
depends_on:
- drone-server
environment:
- DRONE_RPC_SERVER=http://drone-server
- DRONE_RPC_SECRET=ALQU2M0KdptXUdTPKcEw
- DRONE_DEBUG=true
- DOCKER_HOST=tcp://docker-bind:2375
- DRONE_SERVER=drone-server:9000
- DRONE_SECRET=ALQU2M0KdptXUdTPKcEw
- DRONE_MAX_PROCS=5
networks:
- cicd-network
docker-bind:
image: docker:dind
container_name: docker-bind
restart: unless-stopped
privileged: true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- cicd-network
networks:
cicd-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
gateway: 172.20.0.1
volumes:
drone-data:
driver: local
gogs-data:
driver: local
mysql-data:
driver: local
2. 配置文件详解
Drone Server 配置
# Drone Server 环境变量详解
environment:
# 开启 Drone UI
- DRONE_OPEN=true
# Drone 服务器主机名
- DRONE_SERVER_HOST=drone-server
# 开启调试模式
- DRONE_DEBUG=true
# Git 认证配置
- DRONE_GIT_ALWAYS_AUTH=false
- DRONE_GOGS=true
- DRONE_GOGS_SKIP_VERIFY=false
- DRONE_GOGS_SERVER=http://gogs:3000
# 提供商配置
- DRONE_PROVIDER=gogs
# 数据库配置
- DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
- DRONE_DATABASE_DRIVER=sqlite3
# 服务器协议
- DRONE_SERVER_PROTO=http
# RPC 密钥 (必须与 Agent 一致)
- DRONE_RPC_SECRET=ALQU2M0KdptXUdTPKcEw
# 服务器密钥
- DRONE_SECRET=ALQU2M0KdptXUdTPKcEw
Gogs 配置
# Gogs 环境变量
environment:
# 时区设置
- TZ=Asia/Shanghai
# 端口映射
ports:
- "10022:22" # SSH 端口
- "3000:3000" # Web 端口
# 数据卷挂载
volumes:
- ./data/gogs:/data # Gogs 数据目录
MySQL 配置
# MySQL 环境变量
environment:
# 数据库密码
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: gogs
MYSQL_USER: gogs
MYSQL_PASSWORD: pass
# 时区设置
TZ: Asia/Shanghai
# 数据库字符集配置
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
四、部署和启动
1. 启动服务
# 进入项目目录
cd /opt/cicd-platform
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f
2. 服务启动验证
检查容器状态
# 查看所有容器状态
docker-compose ps
# 预期输出
NAME COMMAND SERVICE STATUS PORTS
drone-agent "drone-agent" drone-agent running 9000/tcp
drone-server "/drone/drone-server" drone-server running 0.0.0.0:8080->80/tcp, 0.0.0.0:8843->443/tcp, 0.0.0.0:9000->9000/tcp
docker-bind "dockerd-entrypoint.…" docker-bind running 2375-2376/tcp
gogs "/app/gogs/gogs" gogs running 0.0.0.0:10022->22/tcp, 0.0.0.0:3000->3000/tcp
mysql "docker-entrypoint.s…" mysql running 0.0.0.0:3308->3306/tcp
检查网络连接
# 检查服务间网络连接
docker-compose exec drone-server ping gogs
docker-compose exec drone-server ping mysql
五、Gogs 初始化配置
1. 访问 Gogs Web 界面
打开浏览器访问:http://localhost:3000
数据库配置页面
数据库类型:MySQL
数据库主机:mysql:3306
数据库用户:gogs
数据库密码:pass
数据库名称:gogs
应用基本设置
应用名称:Gogs
仓库根目录:/data/git/repositories
运行系统用户:git
域名:localhost
SSH 端口:10022
HTTP 端口:3000
应用 URL:http://localhost:3000
日志路径:/data/gogs/log
2. 创建管理员账户
管理员用户名:admin
管理员密码:your_password
确认密码:your_password
邮箱:admin@example.com
3. 验证 Gogs 安装
# 检查 Gogs 容器日志
docker-compose logs gogs
# 检查数据库连接
docker-compose exec mysql mysql -u gogs -ppass -e "SHOW DATABASES;"
# 测试 SSH 连接
ssh -T -p 10022 git@localhost
六、Drone 配置和集成
1. 访问 Drone Web 界面
打开浏览器访问:http://localhost:8080
2. 激活仓库
登录 Drone
- 使用 Gogs 的管理员账户登录
- 用户名和密码与 Gogs 一致
激活仓库
- 选择要激活的仓库
- 点击 “ACTIVATE” 按钮
- 配置仓库设置
3. Webhook 配置验证
检查 Webhook 设置
在 Gogs 仓库设置中:
- 进入仓库设置 → Webhooks
- 查看 Drone 自动创建的 Webhook
- 测试 Webhook 连接
# 测试 Webhook 连接
curl -X POST http://localhost:8080/hook \
-H "Content-Type: application/json" \
-d '{"test": true}'
七、构建流水线配置
1. 创建 .drone.yml 文件
在项目根目录创建 .drone.yml 文件:
kind: pipeline
name: demo
steps:
# 构建步骤
- name: build
image: golang:1.11.4
commands:
- pwd
- go version
- go build .
- go test demo/util
# 前端构建(可选)
# - name: frontend
# image: node:6
# commands:
# - npm install
# - npm test
# Docker 镜像构建和推送
- name: publish
image: plugins/docker:latest
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: example/demo
tags: latest
# SSH 部署
- name: deploy
image: appleboy/drone-ssh
pull: true
settings:
host: example.me
user: root
key:
from_secret: deploy_key
script:
- cd /data
- mkdir app/
- cd /data/app
- docker rmi -f example/demo
- echo "login docker"
- echo "login success, pulling..."
- docker pull example/demo:latest
- echo "image running"
- docker run -p 8088:8088 -d example/demo
- echo "run success"
2. 配置文件详解
Pipeline 基础配置
# Pipeline 类型
kind: pipeline
# Pipeline 名称
name: demo
# 工作目录
workspace:
base: /go
path: src/github.com/example/demo
步骤配置
steps:
- name: build # 步骤名称
image: golang:1.11.4 # 使用的 Docker 镜像
commands: # 执行的命令
- pwd
- go version
- go build .
- go test demo/util
when: # 触发条件
branch: master
event: push
Docker 构建配置
- name: publish
image: plugins/docker:latest
settings:
# Docker Hub 认证信息
username:
from_secret: docker_username
password:
from_secret: docker_password
# 镜像配置
repo: example/demo
tags:
- latest
- ${DRONE_COMMIT_SHA:0:8}
# 构建参数
dockerfile: Dockerfile
context: .
# 推送配置
auto_tag: true
auto_tag_suffix: linux-amd64
SSH 部署配置
- name: deploy
image: appleboy/drone-ssh
settings:
# SSH 连接信息
host:
from_secret: deploy_host
user: root
port: 22
key:
from_secret: deploy_key
# 部署脚本
script:
- cd /data/app
- docker-compose down
- docker-compose pull
- docker-compose up -d
# 超时配置
timeout: 300
八、Secrets 管理
1. 配置 Docker Hub 凭据
在 Drone 项目设置中添加 Secrets:
# Docker Hub 用户名
Secret Name: docker_username
Secret Value: your_docker_username
# Docker Hub 密码
Secret Name: docker_password
Secret Value: your_docker_password
2. 配置 SSH 部署密钥
生成 SSH 密钥对
# 生成 SSH 密钥
ssh-keygen -t rsa -b 4096 -C "drone-deploy" -f drone-deploy-key
# 私钥内容 (添加到 Drone Secrets)
cat drone-deploy-key
# 公钥内容 (添加到目标服务器)
cat drone-deploy-key.pub
配置目标服务器
# 在目标服务器上添加公钥
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 添加公钥到 authorized_keys
cat drone-deploy-key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 设置正确的权限
chmod 600 ~/.ssh/drone-deploy-key
chmod 644 ~/.ssh/drone-deploy-key.pub
添加 Drone Secrets
# SSH 私钥
Secret Name: deploy_key
Secret Value: -----BEGIN RSA PRIVATE KEY-----
... (私钥内容) ...
-----END RSA PRIVATE KEY-----
# 部署主机
Secret Name: deploy_host
Secret Value: 192.168.1.100
九、高级配置
1. 多环境部署
kind: pipeline
name: deploy-staging
steps:
- name: deploy-staging
image: appleboy/drone-ssh
settings:
host:
from_secret: staging_host
user: deploy
key:
from_secret: deploy_key
script:
- cd /opt/app
- docker-compose -f docker-compose.staging.yml up -d
when:
branch: develop
event: push
---
kind: pipeline
name: deploy-production
steps:
- name: deploy-production
image: appleboy/drone-ssh
settings:
host:
from_secret: production_host
user: deploy
key:
from_secret: deploy_key
script:
- cd /opt/app
- docker-compose -f docker-compose.prod.yml up -d
when:
branch: master
event: push
2. 条件触发
steps:
- name: test
image: golang:1.11.4
commands:
- go test -v ./...
when:
branch:
- master
- develop
event:
- push
- pull_request
- name: deploy
image: appleboy/drone-ssh
settings:
host:
from_secret: deploy_host
script:
- echo "Deploying to production"
when:
branch: master
event: push
status: success
3. 并行执行
kind: pipeline
name: parallel-tests
steps:
- name: test-backend
image: golang:1.11.4
commands:
- go test ./backend/...
depends_on: [clone]
- name: test-frontend
image: node:12
commands:
- npm test
depends_on: [clone]
- name: integration-test
image: golang:1.11.4
commands:
- go test ./integration/...
depends_on: [test-backend, test-frontend]
十、监控和日志
1. 构建状态监控
查看构建历史
在 Drone Web 界面:
- 进入项目页面
- 查看构建历史列表
- 点击构建编号查看详情
构建状态徽章
# 在 README.md 中添加构建状态徽章

2. 日志管理
查看服务日志
# 查看所有服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f drone-server
docker-compose logs -f gogs
docker-compose logs -f drone-agent
# 查看最近的日志
docker-compose logs --tail=100 drone-server
构建日志分析
# 获取构建日志 API
curl -H "Authorization: Bearer YOUR_TOKEN" \
http://localhost:8080/api/repos/example/demo/builds/123/logs
# 分析构建失败模式
grep -E "ERROR|FAIL|error" drone-build-logs.txt
3. 性能监控
资源使用监控
# 监控容器资源使用
docker stats
# 查看磁盘使用
df -h
du -sh /opt/cicd-platform/
# 监控内存使用
free -h
构建性能优化
# 优化构建缓存
steps:
- name: restore-cache
image: plugins/s3-cache:1
settings:
restore: true
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
bucket: drone-cache
region: us-east-1
mount:
- /go/pkg/mod
- /root/.cache/go-build
- name: build
image: golang:1.11.4
commands:
- go build .
- name: rebuild-cache
image: plugins/s3-cache:1
settings:
rebuild: true
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
bucket: drone-cache
region: us-east-1
mount:
- /go/pkg/mod
- /root/.cache/go-build
十一、故障排除
1. 常见启动问题
容器启动失败
# 检查容器状态
docker-compose ps
# 查看详细错误信息
docker-compose logs [service-name]
# 检查端口占用
netstat -tunlp | grep -E ':(3000|8080|3308|10022)'
# 重启服务
docker-compose restart [service-name]
网络连接问题
# 检查网络配置
docker network ls
docker network inspect cicd-platform_cicd-network
# 测试服务间连接
docker-compose exec drone-server ping gogs
docker-compose exec gogs ping mysql
# 重建网络
docker-compose down
docker-compose up -d
2. Gogs 配置问题
数据库连接失败
# 检查 MySQL 状态
docker-compose exec mysql mysql -u root -ppass -e "SHOW PROCESSLIST;"
# 检查数据库权限
docker-compose exec mysql mysql -u root -ppass -e "SHOW GRANTS FOR 'gogs'@'%';"
# 重置数据库密码
docker-compose exec mysql mysql -u root -ppass -e "ALTER USER 'gogs'@'%' IDENTIFIED BY 'pass';"
SSH 连接问题
# 测试 SSH 连接
ssh -T -p 10022 git@localhost
# 检查 SSH 密钥
ls -la /opt/cicd-platform/data/gogs/git/.ssh/
# 重启 SSH 服务
docker-compose restart gogs
3. Drone 配置问题
Agent 连接失败
# 检查 Agent 状态
docker-compose exec drone-agent ps aux
# 检查 RPC 连接
curl -H "Authorization: Bearer DRONE_RPC_SECRET" \
http://localhost:9000/rpc/info
# 重启 Agent
docker-compose restart drone-agent
Webhook 不工作
# 测试 Webhook
curl -X POST http://localhost:8080/hook \
-H "Content-Type: application/json" \
-d '{"zen": "Non-blocking is better than blocking"}'
# 检查 Drone 日志
docker-compose logs drone-server | grep hook
十二、安全配置
1. 网络安全
防火墙配置
# 开放必要端口
ufw allow 3000/tcp # Gogs Web
ufw allow 10022/tcp # Gogs SSH
ufw allow 8080/tcp # Drone Web
ufw allow 3308/tcp # MySQL (仅内部访问)
# 限制 MySQL 访问
ufw deny 3308/tcp
docker-compose exec mysql iptables -A INPUT -p tcp --dport 3306 -s 172.20.0.0/16 -j ACCEPT
SSL/TLS 配置
# Drone HTTPS 配置
environment:
- DRONE_SERVER_PROTO=https
- DRONE_SERVER_HOST=your-domain.com
- DRONE_TLS_CERT=/data/cert/server.crt
- DRONE_TLS_KEY=/data/cert/server.key
volumes:
- ./certs:/data/cert:ro
2. 访问控制
用户权限管理
# 在 Gogs 中创建组织
# 1. 登录 Gogs 管理员账户
# 2. 创建组织 (如: dev-team)
# 3. 添加用户到组织
# 4. 设置仓库权限
# Drone 权限配置
# 1. 在 Drone 中激活组织仓库
# 2. 配置组织级别的 Secrets
# 3. 设置构建权限
API 访问控制
# 生成 Drone API Token
# 1. 登录 Drone
# 2. 进入用户设置
# 3. 生成 Personal Access Token
# 使用 API Token
curl -H "Authorization: Bearer YOUR_TOKEN" \
http://localhost:8080/api/user/repos
3. 数据备份
自动备份脚本
#!/bin/bash
# backup-cicd-platform.sh
BACKUP_DIR="/backup/cicd-platform"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 备份 Docker 卷
docker run --rm -v cicd-platform_gogs-data:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf /backup/gogs-data-$DATE.tar.gz -C /data .
docker run --rm -v cicd-platform_mysql-data:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf /backup/mysql-data-$DATE.tar.gz -C /data .
docker run --rm -v cicd-platform_drone-data:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf /backup/drone-data-$DATE.tar.gz -C /data .
# 备份配置文件
tar czf "$BACKUP_DIR/config-$DATE.tar.gz" \
/opt/cicd-platform/docker-compose.yml \
/opt/cicd-platform/.env
# 清理旧备份 (保留7天)
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
echo "备份完成: $BACKUP_DIR"
十三、最佳实践
1. 项目结构建议
project-root/
├── .drone.yml # Drone 配置文件
├── Dockerfile # Docker 构建文件
├── docker-compose.yml # 本地开发环境
├── scripts/
│ ├── build.sh # 构建脚本
│ ├── test.sh # 测试脚本
│ └── deploy.sh # 部署脚本
├── k8s/ # Kubernetes 配置
├── docs/ # 项目文档
└── README.md # 项目说明
2. 构建优化
多阶段构建
# Dockerfile
FROM golang:1.11.4-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]
缓存优化
steps:
- name: vendor
image: golang:1.11.4
commands:
- go mod download
volumes:
- /go/pkg/mod:/go/pkg/mod
- name: test
image: golang:1.11.4
commands:
- go test -v ./...
volumes:
- /go/pkg/mod:/go/pkg/mod
3. 监控和告警
构建通知
steps:
- name: notify-slack
image: plugins/slack
settings:
webhook:
from_secret: slack_webhook
channel: ci-cd
template: >
✅ Build succeeded for
❌ Build failed for
when:
status: [success, failure]
邮件通知
steps:
- name: notify-email
image: drillster/drone-email
settings:
host: smtp.example.com
username:
from_secret: email_username
password:
from_secret: email_password
from: drone@example.com
recipients:
- dev-team@example.com
when:
status: [failure]
总结
通过本文的详细指南,我们成功搭建了一个完整的 Drone + Gogs CI/CD 平台。这个平台提供了:
核心功能
- 代码托管:Gogs 提供轻量级的 Git 仓库管理
- 持续集成:Drone 提供强大的 CI/CD 流水线
- 自动化部署:支持多种部署方式和环境
- 监控告警:构建状态通知和日志管理
技术优势
- 轻量级:相比 GitLab + Jenkins 更加节省资源
- 易于部署:Docker Compose 一键部署
- 高度可配置:灵活的 Pipeline 配置
- 插件生态:丰富的插件支持各种需求
应用场景
- 个人项目:轻量级的个人 CI/CD 解决方案
- 小团队:适合中小型团队的 DevOps 需求
- 学习环境:学习 CI/CD 概念和实践
- 内部工具:企业内部开发工具链
通过这个平台,开发团队可以实现从代码提交到生产部署的完全自动化,大大提升开发效率和代码质量。
整理时间: 2026年2月10日 整理者: 来财 (OpenClaw AI助手) 参考来源: Drone 官方文档 + Gogs 官方文档 + 社区最佳实践