使用 Drone 进行持续构建与发布:基于 GitHub OAuth 与 docker-compose 的 CI/CD 部署指南
2026/9/23 21:25:38 网站建设 项目流程
  • 教程
  • 云原生
  • 容器编排

【免费下载链接】kubernetes-handbook

Kubernetes 架构与生态:从云原生到 AI 原生基础设施的构建指南

项目地址:https://gitcode.com/gh_mirrors/ku/kubernetes-handbook
点击查看免费下载

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_CLIENTDRONE_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即可打开登录界面
9000Drone 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-serverdrone-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:9000agent 通过 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 builddocker 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 原生基础设施的构建指南

项目地址:https://gitcode.com/gh_mirrors/ku/kubernetes-handbook
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询