7.2 自动化构建(Drone)

任务一:准备工作
在开始配置 Drone 之前,我们需要先在 Gitea 中创建一个 OAuth 应用,以便 Drone 能够通过 Gitea 进行身份验证。
1、打开上节课部署的 Gitea,默认网址是 ip:3000
docker ps
命令查看 Gitea 容器的端口映射情况。2、点击右上角头像,进入设置页面
3、在选项卡中进入【应用】,划到最下方,填写信息:
应用名称:drone
重定向URL:http://ip:7929/login
ip
替换为你自己服务器的 IP 地址,这非常重要!否则 Drone 将无法正常工作。4、点击【创建应用】,在新页面中复制并保存好客户端ID和客户端密钥
任务二:部署 Drone
现在我们开始部署 Drone 服务。Drone 由三个主要组件组成:数据库、服务器和运行器。
1、创建项目目录
mkdir /srv/drone
2、创建 Docker Compose 配置文件
cd /srv/drone
vim docker-compose.yml
文件内容如下:
version: '3.9'
networks:
drone:
volumes:
drone:
services:
# 共有三个服务,分别是db、server和runner
db:
image: postgres:latest
restart: always
networks:
- drone
ports:
- '7931:5432'
environment:
# 下面这三个环境变量用来控制数据库初始化时:创建用户和密码、创建数据库
- POSTGRES_USER=drone # 用户
- POSTGRES_PASSWORD=drone # 密码
- POSTGRES_DB=drone # 数据库
volumes:
- drone/db:/var/lib/postgresql/data
server:
image: drone/drone:2
restart: always
networks:
- drone
ports:
- '7929:80'
environment:
# 访问协议
- DRONE_SERVER_PROTO=http
# 主机名称(域名或IP),改成自己的IP地址(需要修改)
- DRONE_SERVER_HOST=10.0.0.225:7929
# 与runner通讯的密钥, 可以用openssl生成
- DRONE_RPC_SECRET=e1ad8a7f3dbc68ca9c21bcc949335009
# 创建管理员账户,用户名和Gitea用户名需要一致(需要修改)
- DRONE_USER_CREATE=username:password,admin:true
- DRONE_DATABASE_DRIVER=postgres # 数据库类型
- DRONE_DATABASE_DATASOURCE=postgres://drone:drone@db/drone?sslmode=disable # 数据库连接
- 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 客户端密钥(需要修改)
- DRONE_GITEA_SKIP_VERIFY=false
volumes:
- drone/data:/data
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- db
runner:
image: drone/drone-runner-docker:1.8.3
restart: always
networks:
- drone
ports:
- '7930:3000'
environment:
# 名称
- DRONE_RUNNER_NAME=docker-runner
- DRONE_RUNNER_CAPACITY=10 # 限制runner可执行的并发管道数量 默认为2
- 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
- DRONE_UI_USERNAME=username # Drone Runner 的 UI 用户账号(需要修改)
- DRONE_UI_PASSWORD=password # Drone Runner 的 UI 用户密码(需要修改)
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
点击 Continue 自动跳转到 gitea 的授权页面,点击【应用授权】
出现以下页面的话,填写一些用户信息:
任务三:配置 drone
1、安装完成后,出现以下页面
点击右上角的SYNC(同步),页面中会出现我们托管到 gitea 的项目。
点击该项目的名称,出现Active(激活)页面,点击按钮进行激活
2、回到 gitea 的项目页面,点击右侧的【设置】
从左侧菜单找到【Web钩子】,可以发现 drone 已经做好了相应设置:
附:Gitea Webhook 配置
Gitea 出于安全考虑,默认情况下不允许随意调用其他位置的 Web Hooks,因为这些调用过程中会向目标位置发送大量敏感信息。
以下配置仅适用于教学环境,绝对不要在生产环境中使用这样的配置!
如果在使用过程中遇到 Webhook 调用失败的问题,可以通过以下步骤临时调整 Gitea 的安全设置:
1、打开 Gitea 的配置文件:
vim /etc/gitea/app.ini
2、在文件末尾添加以下内容,允许所有主机接收 Webhook:
[webhook]
ALLOWED_HOST_LIST = *
3、重启 Gitea 服务使配置生效:
# 重启服务
systemctl restart gitea
# 检查服务状态
systemctl status gitea
在生产环境中,应该明确指定允许接收 Webhook 的主机列表,而不是使用通配符。例如:
[webhook]
ALLOWED_HOST_LIST = 192.168.1.100,drone.example.com
这样可以大大降低安全风险。