7.2 自动化构建(自动化工具Drone)

系列 - 自动化构建与持续集成
目录
摘要
通过本实验,你将学会如何配置 Drone 与 Gitea 集成,实现代码提交后的自动构建、部署和通知。
准备工作:Gitea Webhook 配置

安全警告
以下配置仅适用于教学环境,绝对不要在生产环境中使用这样的配置!
1、打开 Gitea 的配置文件:
vim /srv/gitea/data/gitea/conf/app.ini
2、在文件末尾添加以下内容,允许所有主机接收 Webhook:
[webhook]
ALLOWED_HOST_LIST = *
3、重启 Gitea 服务使配置生效:
# 重启服务
cd /srv/gitea/
docker compose restart

生产环境建议
在生产环境中,应该明确指定允许接收 Webhook 的主机列表,而不是使用通配符。例如:
[webhook]
ALLOWED_HOST_LIST = 192.168.1.100,drone.example.com
这样可以大大降低安全风险。
任务一:在Gitea中创建应用

在开始配置 Drone 之前,我们需要先在 Gitea 中创建一个 OAuth 应用,以便 Drone 能够通过 Gitea 进行身份验证。
1、打开上节课部署的 Gitea,默认端口写是 3000
2、点击右上角头像,进入设置页面

3、在选项卡中进入【应用】,划到最下方,填写信息:
应用名称:drone
重定向URL:http://ip:7929/login
警告
将
ip 替换为你自己服务器的 IP 地址,这非常重要!否则 Drone 将无法正常工作。
4、点击【创建应用】,在新页面中复制并保存好客户端ID和客户端密钥

危险
客户端ID和密钥是敏感信息,请妥善保管!这些信息将在后续配置 Drone 时使用,一旦泄露可能导致安全风险。
任务二:部署 Drone
现在我们开始部署 Drone 服务。Drone 由两个主要组件组成:服务器和运行器。

1、创建项目目录
mkdir /srv/drone
2、创建 Docker Compose 配置文件
cd /srv/drone
vim docker-compose.yml
文件内容如下:
networks:
drone:
services:
# 共有两个服务,分别是server和runner
server:
image: drone/drone:2
restart: always
networks:
- drone
ports:
- '7929:80'
environment:
# 访问协议
- DRONE_SERVER_PROTO=http
# 主机名称,改成自己的IP地址【需要修改】
- DRONE_SERVER_HOST=10.0.0.225:7929
# 与runner通讯的密钥
- DRONE_RPC_SECRET=e1ad8a7f3dbc68ca9c21bcc949335009
# 创建管理员账户,用户名和Gitea用户名需要一致【需要修改】
- DRONE_USER_CREATE=username:用户名,admin:true
- DRONE_GIT_ALWAYS_AUTH=true # 使用oauth身份验证信息拉取代码
- DRONE_GITEA_SERVER=http://10.0.0.225:3000 # gitea服务器地址【需要修改】
- DRONE_GITEA_CLIENT_ID=c0790745-9db8-4ba8-80f6-c1f60d48b3db # gitea 客户端ID【需要修改】
- DRONE_GITEA_CLIENT_SECRET=gto_gflojyryvu6v5fujaj6nqfa6gd44i4msh3xgwvgmg7dpuqesga5a # gitea 客户端密钥【需要修改】
volumes:
- ./data:/data
- /var/run/docker.sock:/var/run/docker.sock
runner:
image: drone/drone-runner-docker:1.8.3
restart: always
networks:
- drone
ports:
- '7930:3000'
environment:
- DRONE_RPC_PROTO=http # 访问drone server 协议
- DRONE_RPC_HOST=10.0.0.225:7929 # 访问drone server 服务器地址【需要修改】
# 与 drone server 通讯的密钥, 需与上面Server的 DRONE_RPC_SECRET 值相同
- DRONE_RPC_SECRET=e1ad8a7f3dbc68ca9c21bcc949335009
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
depends_on:
- server
3、启动 Drone 服务
使用 Docker Compose 启动服务:
docker compose up -d
验证服务是否运行成功:
docker compose ps
如果所有服务都显示为 running 状态,说明部署成功:

技巧
如果服务没有正常启动,可以使用
docker compose logs 命令查看详细日志,找出问题所在。4、登录 Drone 并进行配置
打开浏览器,访问 http://你的IP地址:7929

信息
首次访问 Drone 时,会自动跳转到 Gitea 进行授权。授权成功后,会返回到 Drone 界面,并显示你在 Gitea 上的仓库列表。
点击 Continue 自动跳转到 gitea 的授权页面,点击【应用授权】

出现以下页面的话,填写一些用户信息:

任务三:配置 drone
1、安装完成后,出现以下页面

点击右上角的SYNC(同步),页面中会出现我们托管到 gitea 的项目。

点击该项目的名称,出现Active(激活)页面,点击按钮进行激活

2、回到 gitea 的项目页面,点击右侧的【设置】

从左侧菜单找到【Web钩子】,可以发现 drone 已经做好了相应设置:


