Drone 是一个运用 Go 言语编写的自助式的继续集成渠道,和 Gitea 相同能够彻底依据容器布置,轻松扩展流水线规划。开发者只需要将继续集成进程经过简略的 YAML 语法写入 Gitea 库房目录下的描绘文件 .drone.yml
就能够完结 CI/CD 装备。
下面,咱们以 gitea.com
服务器为例,建立一套运用 Gitea 与 Drone 的 CI/CD 体系。
体系结构
Drone 由两部分构成:
- Server : 担任使命调度
- Runner : 履行 Pipeline 的详细使命
用户将代码推送到 Gitea 时触发 Webhook,调集 Drone 从 Gitea 拉取最新的代码并依据 .drone.yml 描绘文件履行 CI/CD 流水线。
网络结构
由于 CI/CD 使命的特殊性,作业繁忙时会占用较多的体系资源,因而为了进步体系整体可靠性,不建议将 Gitea、Drone Server、Drone Runner 装置在同一台服务器上。
- 在本地局域网建立时应该保证以上服务能够经过域名、IP相互拜访。例如:
gitea.example.com -> 192.168.3.10 drone.example.com -> 192.168.3.20 runner.example.com -> 192.168.3.30
- 如需运用
docker compose
在本地开发环境建立高可用结构体系,请参考官方文档: : docs.drone.io/server/ha/d…
准备作业
在 Gitea 上创立 OAuth2 运用程序
在本例中,Drone 依据 OAuth2 认证授权拜访您的 Gitea API。您能够创立一个专用于 CI/CD 的账号,并将该账号添加为代码库房协作者或许安排管理员。
首要,登录一个您要用于集成 Drone 的 Gitea 账号,进入 设置 – 运用,创立一个 Gitea OAuth2 运用程序。
-
运用称号 : 您能够任取一个姓名,此案例中咱们填写 Drone
-
重定向 URL : 授权回调 URL 形如
http(s)://<YOUR_DRONE_SERVER>:<PORT>/login
,有必要运用您设定的 Drone 服务器协议和主机地址。假如运用非标准的HTTP(S)端口,还应该指定精确的端口。 : 例如https://drone.gitea.io/login
修正 Gitea 服务器的 Webhook 白名单
出于安全考虑,Gitea 默许禁止触发外部主机的 Webhook。您能够将外部主机添加到 webhook.ALLOWED_HOST_LIST
白名单来解除这一约束。详细信息参考文档 Webhook。
修正装备时,打开 conf/app.ini
,添加 ALLOWED_HOST_LIST = *
到 [webhook]
栏目中,并重启 Gitea 服务器。例如:
[webhook]
ALLOWED_HOST_LIST = *
创立同享密钥
同享密钥用于 Drone Server 和 Drone Runner 之间的通信认证。记录下您创立的同享密钥,稍后在装置 Drone Server 和 Drone Runner 时将运用此密钥填充环境变量 DRONE_RPC_SECRET
。
您能够运用 OpenSSL 生成随机的十六进制同享密钥:
$ openssl rand -hex 16
c5704bc389f1e3d47f1c4751d1295c86
运用 Docker 装置 Drone 服务器
Drone 服务器是一个轻量级的 Docker 容器,运用 SQLite 作为默许数据库,支撑经过环境变量动态设定运转参数。有关装备参数的完整列表,请参阅 Drone Server 文档。
环境变量
- DRONE_GITEA_CLIENT_ID : (必填)您的 Gitea OAuth 客户端ID
- DRONE_GITEA_CLIENT_SECRET : (必填)您的 Gitea OAuth 客户端密钥
-
DRONE_GITEA_SERVER
: (必填)您的 Gitea 服务器地址,例如
https://gitea.com
。注意填写精确的http(s)
协议,不然您会看到来自 Gitea 的错误报告:unsupported protocol scheme
。 -
DRONE_RPC_SECRET
: (必填)在准备作业中运用
openssl rand -hex 16
生成的同享密钥。这个密钥用于验证 Drone Server 和 Runner 之间的 RPC 衔接。因而,在 Server 和 Runner 上都有必要运用相同的密钥。 -
DRONE_SERVER_HOST
: (必填)您拜访 Drone 时所用的域名或 IP 地址。假如运用 IP 地址,还应该包括端口。 例如
drone.gitea.io
。 -
DRONE_SERVER_PROTO
: (必填)设置服务器的协议,运用:
http
或https
。 假如您已经装备 ssl 或 acme,此字段默许为https
。
发动服务器
为了便于修正容器参数,咱们创立一个 docker-compose.yml
模板来装备 Drone 服务器容器。
依据下面的 Docker Compose 模板,运用指令 docker compose up -d
发动 Drone 服务器。
# docker-compose.yml
version: "3"
services:
drone:
image: drone/drone:2
container_name: drone
environment:
- DRONE_GITEA_SERVER=https://gitea.com
- DRONE_GITEA_CLIENT_ID=change-to-your-gitea-client-id
- DRONE_GITEA_CLIENT_SECRET=change-to-your-gitea-client-secret
- DRONE_RPC_SECRET=change-to-your-shared-secret
- DRONE_SERVER_HOST=drone.gitea.io
- DRONE_SERVER_PROTO=https
restart: always
volumes:
- ./drone:/data
ports:
- 80:80
- 443:443
运用 Docker 装置 Drone Runner
Drone 服务器管理 CI/CD 体系的调度,而 Drone Runner 则是 CI/CD 流水线的履行者。
环境准备
Drone Runner 支撑多种运转环境:Doceker、K8s、Windows/Linux/MacOS客户端、SSH 等。
运用 Docker 作为 Drone Runner 的优点是能够将流水线履行进程彻底以容器化的方法履行,不对容器的宿主服务器环境形成损坏。在本实践中,咱们仍然运用 Docker 在 Linux 服务器上装置 Drone Runner。Docker 容器支撑的架构包括:
- amd64
- arm
- arm64
环境变量
Docker Runner 运用环境变量动态设定运转参数。有关参数的完整列表,请参阅 Drone Runner 文档。
- DRONE_RPC_HOST : 填写 Drone Server 的主机名(以及可选填的端口号)。依据 PRC 协议衔接 Runner 与 Server,接纳流水线使命
- DRONE_RPC_PROTO
: 传输协议:
http
或https
- DRONE_RPC_SECRET : 与 Drone Server 同享的密钥
- DRONE_RUNNER_CAPACITY
: Runner 能够并发履行的流水线数量,默许:
2
- DRONE_RUNNER_NAME : 自定义 Runner 称号
发动 Runner
依据下面的 Docker Compose 模板,运用指令 docker compose up -d
发动 Drone Runner。
version: "3"
services:
runner:
image: drone/drone-runner-docker:1
container_name: runner
environment:
- DRONE_RPC_PROTO=https
- DRONE_RPC_HOST=drone.gitea.io
- DRONE_RPC_SECRET=change-to-your-shared-secret
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=my-first-runner
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 3000:3000
验证装置
运用 docker logs
指令查看日志,并验证 Runner 程序是否与 Drone Server 树立衔接。
$ docker logs runner
INFO[0000] starting the server
INFO[0000] successfully pinged the remote server
初始化 Drone
登录 Drone 网页面板,例如 https://drone.gitea.io
,点击 continue
跳转到 Gitea 授权页面,点击运用授权。
假如出现 Unregistered Redirect URI,表明您设置的重定向 URI与 Drone 不匹配,请从头检查。
CI/CD 实操:创立 .drone.yml 验证 Pipeline
Drone 文档为各种编程言语和包管理工具提供了流水线模板。
docs.drone.io/pipeline/do…
这儿咱们以 Go 言语为例,在 Gitea 库房根目录创立一个 .drone.yml
作为咱们自定义的流水线。
演示:
# .drone.yml
kind: pipeline
name: default
steps:
- name: test
image: golang
commands:
- go test
- name: build
image: golang
commands:
- go build
在 Drone 面板上激活库房后提交代码到 Gitea 库房,随即触发 Pipeline 使命。
回到 Gitea 能够看到构建完结后显示的音讯:
✔ continuous-integration/drone/push Build is passing
Ok,这样咱们就为 Gitea 建立好了一个 Drone CI/CD 体系。