尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

使用 Drone 进行持续构建与发布:基于 GitHub OAuth 与 docker-compose 的 CI/CD 部署指南

使用 Drone 进行持续构建与发布:基于 GitHub OAuth 与 docker-compose 的 CI/CD 部署指南 教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 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/CDKubernetes 本身并不提供代码构建、发布和部署能力所有这些工作都是由 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://localhostAuthorization 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_OPENtrue - DRONE_HOST${DRONE_HOST} - DRONE_GITHUBtrue - 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_SERVERdrone-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_OPENtrue开放注册模式允许新用户通过 GitHub OAuth 直接登录DRONE_HOST${DRONE_HOST}Drone 对外暴露的地址即上面填写的http://localhostDRONE_GITHUBtrue启用 GitHub 作为代码托管与认证提供商DRONE_GITHUB_CLIENT/DRONE_GITHUB_SECRET即前面申请的 OAuth Client ID 和 Client SecretDRONE_SECRET可以是任意随机字符串必须确保drone-server与drone-agent两侧的DRONE_SECRET完全相同它是 server 与 agent 之间通信的共享密钥depends_on: - drone-server保证 agent 在 server 启动之后启动/var/run/docker.sock:/var/run/docker.sock将宿主机的 Docker 守护进程套接字挂载给 agentagent 借此动态创建容器来执行每一个构建步骤这正是基于容器的持续集成的原理所在DRONE_SERVERdrone-server:9000agent 通过 docker-compose 内部网络连接 server 的 RPC 端口环境变量可以通过 shell 导出或docker-compose读取的.env文件提供例如export DRONE_HOSThttp://localhost export DRONE_GITHUB_CLIENT你的_client_id export DRONE_GITHUB_SECRET你的_client_secret export DRONE_SECRET任意随机字符串启动 Drone使用下面的命令在本地启动 Dronedocker-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/CDKubernetes 中 CI/CD 的现状、DevOps 模式与 GitOps 实践使用 Jenkins 进行持续集成与发布同一章节下基于 Jenkins 的完整构建发布流水线方案最佳实践概览本手册最佳实践章节的总体结构与各主题索引赞分享教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载相关推荐Wasp 应用 CI/CD 实战指南基于 GitHub Actions 的自动化测试与持续部署Wasp 应用 CI/CD 实战指南基于 GitHub Actions 的自动化测试与持续部署 在 Wasp 全栈框架React Node.js PWeb框架后端前端CLI开发工具GoFr CI/CD 实战指南基于 GitHub Actions 的构建、镜像与部署流水线GoFr CI/CD 实战指南基于 GitHub Actions 的构建、镜像与部署流水线 GoFr 是一个强调开箱即用的 Go 微服务框架其 CI/CD后端微服务云原生可观测性如何用frePPLE开源供应链计划系统解决企业生产库存难题5个步骤实现智能优化如何用frePPLE开源供应链计划系统解决企业生产库存难题5个步骤实现智能优化 你是否经常面临生产计划混乱、库存积压严重、需求预测不准确的困境在当今快速变化后端企业应用任务调度创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表