- 教程
- 云原生
- 容器编排
【免费下载链接】kubernetes-handbook
Kubernetes 架构与生态:从云原生到 AI 原生基础设施的构建指南
Drone 是一款用 Go 语言开发的、基于容器运行的开源持续集成软件,它天然契合 Kubernetes 时代的"流水线即代码"理念。本指南以 持续集成与发布(CI/CD) 章节为背景,完整演示如何在本地环境通过 GitHub OAuth 授权、以 docker-compose 单机方式部署 Drone server 与 agent,并接入 GitHub 仓库实现持续构建与发布,帮助你在实践中掌握一套轻量、容器化的 CI 工具落地方法。
Drone 与 Kubernetes 时代的 CI/CD
Kubernetes 本身并不提供代码构建、发布和部署能力,所有这些工作都是由 CI/CD 工作流完成的。在 持续集成与发布(CI/CD) 中,作者介绍了 DevOps 模式、GitOps 以及云原生应用模式:GitOps 主张通过克隆或拉取 Git 仓库检索最新配置清单,用kubectl diff与集群实时资源比对,再以kubectl apply将变更推送到集群。而在工具选型上,既可以与企业内部原有的持续构建系统集成(例如 使用 Jenkins 进行持续集成与发布),也可以在 Kubernetes 中部署一套新的持续构建与发布工具,Drone 正是其中的典型代表。
Drone 的核心特点是:
- Go 语言编写:单一静态二进制部署简单,资源占用低;
- 基于容器执行:流水线中的每一步都在独立的 Docker 容器中运行,构建环境随用随取、互不污染;
- server / agent 分离架构:从本文的
docker-compose.yaml可以看出,drone-server负责 Web 界面、API 与调度,drone-agent负责在宿主机上通过挂载的/var/run/docker.sock真正执行构建任务,两者通过共享的DRONE_SECRET完成认证。
这套"控制面 + 执行面"的架构与 Kubernetes 的 master/node 思想异曲同工,也是 Drone 后续能在 Kubernetes 集群内以 Pod 方式运行的基础。
第一步:在 GitHub 上配置 OAuth 应用
使用 Drone 对 GitHub 上的代码进行持续构建与发布,需要首先在 GitHub 上设置一个 OAuth 应用,分为两个步骤。
1. 创建新的 OAuth 应用
访问 GitHub 的应用程序设置页面,创建一个新的 OAuth 应用:
- Homepage URL:填写应用程序的地址。因为是在本地运行,所以填写
http://localhost; - Authorization callback URL:用于 GitHub 完成授权后回调 Drone 的地址,本地运行时同样指向
http://localhost。
2. 获取 OAuth Client ID 和 Client Secret
注册完成后即可获得如下所示的 OAuth Client ID 和 Client Secret,请妥善保存,后续配置drone-server环境变量时会用到。
这两组凭据分别对应
DRONE_GITHUB_CLIENT与DRONE_GITHUB_SECRET两个环境变量,是 Drone 与 GitHub 建立信任关系的关键,切勿泄露。
第二步:使用 docker-compose 单机运行 Drone
在本地环境,按照 Drone 官方安装文档的配置方式,使用 docker-compose 安装运行 Drone。由于我们将代码托管在 GitHub 上,需要 Drone 能够持续集成和发布 GitHub 上的代码,因此需要修改docker-compose.yaml中的 GitHub 配置。
完整的docker-compose.yaml如下:
version: '2' services: drone-server: image: drone/drone:0.8 ports: - 80:8000 - 9000 volumes: - /var/lib/drone:/var/lib/drone/ restart: always environment: - DRONE_OPEN=true - DRONE_HOST=${DRONE_HOST} - DRONE_GITHUB=true - DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT} - DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET} - DRONE_SECRET=${DRONE_SECRET} drone-agent: image: drone/agent:0.8 command: agent restart: always depends_on: - drone-server volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_SERVER=drone-server:9000 - DRONE_SECRET=${DRONE_SECRET}配置项与参数说明
对上述配置文件中的关键参数逐一说明:
| 配置项 | 说明 |
|---|---|
80:8000 | 将容器内 Drone server 的 Web 端口8000映射到宿主机80端口,浏览器访问http://localhost即可打开登录界面 |
9000 | Drone server 的 RPC 端口,供 agent 连接,无需映射到宿主机 |
/var/lib/drone:/var/lib/drone/ | 本地挂载的数据目录,用于持久化 Drone 的数据库与构建数据。请确保该目录已存在,且可以被 Docker 访问到,Mac 下可以在 Docker 的共享目录中配置 |
DRONE_OPEN=true | 开放注册模式,允许新用户通过 GitHub OAuth 直接登录 |
DRONE_HOST=${DRONE_HOST} | Drone 对外暴露的地址,即上面填写的http://localhost |
DRONE_GITHUB=true | 启用 GitHub 作为代码托管与认证提供商 |
DRONE_GITHUB_CLIENT/DRONE_GITHUB_SECRET | 即前面申请的 OAuth Client ID 和 Client Secret |
DRONE_SECRET | 可以是任意随机字符串,必须确保drone-server与drone-agent两侧的DRONE_SECRET完全相同,它是 server 与 agent 之间通信的共享密钥 |
depends_on: - drone-server | 保证 agent 在 server 启动之后启动 |
/var/run/docker.sock:/var/run/docker.sock | 将宿主机的 Docker 守护进程套接字挂载给 agent,agent 借此动态创建容器来执行每一个构建步骤,这正是"基于容器的持续集成"的原理所在 |
DRONE_SERVER=drone-server:9000 | agent 通过 docker-compose 内部网络连接 server 的 RPC 端口 |
环境变量可以通过 shell 导出或docker-compose读取的.env文件提供,例如:
export DRONE_HOST=http://localhost export DRONE_GITHUB_CLIENT=你的_client_id export DRONE_GITHUB_SECRET=你的_client_secret export DRONE_SECRET=任意随机字符串启动 Drone
使用下面的命令在本地启动 Drone:
docker-compose up该命令在前台启动;加上-d参数即可在后台启动:
docker-compose up -d启动完成后,访问http://localhost可以看到如下登录画面。
第三步:授权并启用 GitHub 仓库
点击登录后,Drone 会引导用户通过 GitHub OAuth 完成授权,授权后即可看到 GitHub 仓库设置页面:所有可访问的仓库都会列出,可选择需要持续集成的仓库。
对于单个仓库,还可以进入详细的设置页,配置启用状态、受保护分支、镜像拉取凭据等选项。
启用仓库后,即可在仓库根目录添加.drone.yml流水线定义文件(当前仓库中暂无此文件,读者可按 Drone 官方文档的语法自行编写),描述构建、测试、镜像推送与部署步骤。由于 agent 每次构建都在独立的容器中执行,流水线天然具备隔离性与可重复性。
与 Kubernetes 发布流程的衔接
Drone 的价值不止于"构建",还在于"发布"。在 使用 Jenkins 进行持续集成与发布 中,仓库展示了完整的发布流水线形态:用户提交代码(代码中必须包含Dockerfile)→ CI 流水线编译并打包 Docker 镜像推送到镜像仓库 → 依据 Kubernetes YAML 模板替换变量生成应用配置 → 更新 Ingress 路由与 DNS 记录 → 调用 Kubernetes API 部署应用。Drone 完全可以用同样的模式承担其中的 CI 与部分 CD 职责:
- 在流水线中执行
docker build与docker push完成镜像构建与推送; - 在流水线中调用
kubectl apply完成 Kubernetes 资源部署,配合 持续集成与发布(CI/CD) 中介绍的 GitOps 实践(克隆仓库 →kubectl diff比对 →kubectl apply推送),即可把 Git 作为部署配置的唯一事实来源。
参考 最佳实践概览 的整体章节安排,Drone 属于"基于 Kubernetes 做持续集成与发布"这一部分的可选工具,与 Jenkins 相比,它的优势在于配置以 YAML 形式随仓库管理、构建环境完全容器化、部署轻量,适合以 Git 为核心协作模式的中小规模团队快速落地。
参考
- 持续集成与发布(CI/CD):Kubernetes 中 CI/CD 的现状、DevOps 模式与 GitOps 实践
- 使用 Jenkins 进行持续集成与发布:同一章节下基于 Jenkins 的完整构建发布流水线方案
- 最佳实践概览:本手册"最佳实践"章节的总体结构与各主题索引
- 教程
- 云原生
- 容器编排
【免费下载链接】kubernetes-handbook
Kubernetes 架构与生态:从云原生到 AI 原生基础设施的构建指南
相关推荐
Wasp 应用 CI/CD 实战指南:基于 GitHub Actions 的自动化测试与持续部署
Wasp 应用 CI/CD 实战指南:基于 GitHub Actions 的自动化测试与持续部署 在 Wasp 全栈框架(React + Node.js + P
Web框架后端前端CLI开发工具GoFr CI/CD 实战指南:基于 GitHub Actions 的构建、镜像与部署流水线
GoFr CI/CD 实战指南:基于 GitHub Actions 的构建、镜像与部署流水线 GoFr 是一个强调开箱即用的 Go 微服务框架,其 CI/CD
后端微服务云原生可观测性如何用frePPLE开源供应链计划系统解决企业生产库存难题:5个步骤实现智能优化
如何用frePPLE开源供应链计划系统解决企业生产库存难题:5个步骤实现智能优化 你是否经常面临生产计划混乱、库存积压严重、需求预测不准确的困境?在当今快速变化
后端企业应用任务调度
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考