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

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

什么是Webhook

安全警告
以下配置仅适用于教学环境,绝对不要在生产环境中使用这样的配置

1、打开 Gitea 的配置文件:

bash

vim /srv/gitea/data/gitea/conf/app.ini

2、在文件末尾添加以下内容,允许所有主机接收 Webhook:

ini

[webhook]  
ALLOWED_HOST_LIST = *

3、重启 Gitea 服务使配置生效:

bash

# 重启服务
cd /srv/gitea/
docker compose restart

重启服务

生产环境建议

在生产环境中,应该明确指定允许接收 Webhook 的主机列表,而不是使用通配符。例如:

ini

[webhook]
ALLOWED_HOST_LIST = 192.168.1.100,drone.example.com

这样可以大大降低安全风险。

什么是Drone

在开始配置 Drone 之前,我们需要先在 Gitea 中创建一个 OAuth 应用,以便 Drone 能够通过 Gitea 进行身份验证。

1、打开上节课部署的 Gitea,默认端口写是 3000

2、点击右上角头像,进入设置页面

Gitea设置入口

3、在选项卡中进入【应用】,划到最下方,填写信息:

应用名称:drone
重定向URL:http://ip:7929/login

警告
ip 替换为你自己服务器的 IP 地址,这非常重要!否则 Drone 将无法正常工作。

创建Gitea应用

4、点击【创建应用】,在新页面中复制并保存好客户端ID和客户端密钥

保存客户端ID和密钥

危险
客户端ID和密钥是敏感信息,请妥善保管!这些信息将在后续配置 Drone 时使用,一旦泄露可能导致安全风险。

现在我们开始部署 Drone 服务。Drone 由两个主要组件组成:服务器和运行器。

Drone组件

1、创建项目目录

bash

mkdir /srv/drone

2、创建 Docker Compose 配置文件

bash

cd /srv/drone
vim docker-compose.yml

文件内容如下:

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 启动服务:

bash

docker compose up -d

验证服务是否运行成功:

bash

docker compose ps

如果所有服务都显示为 running 状态,说明部署成功:

Drone服务运行状态

技巧
如果服务没有正常启动,可以使用 docker compose logs 命令查看详细日志,找出问题所在。

4、登录 Drone 并进行配置

打开浏览器,访问 http://你的IP地址:7929

Drone登录界面

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

点击 Continue 自动跳转到 gitea 的授权页面,点击【应用授权】

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

1、安装完成后,出现以下页面

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

项目列表

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

激活项目

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

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

相关内容