Drone 基本原理和流程

本文将用简单的方法介绍Drone的基本流程,给大家提供一个整体的概念,不做深入展开,后续文章会对各种细节从原理和代码角度深入研究。

Drone webhook 触发方式

Drone 整个buid流程是由scm(源代码管理工具)触发的,是由scm采用webhook的方式来触发执行的,

什么是webhook,webhook基本原理是什么:

webhook与异步编程中"订阅-发布模型"非常类似,一端触发事件,一端监听执行,一端是发起者,一端是执行者。或者理解为Webhooks是用户定义的HTTP回调(可以用js 的callback理解),它们通常由预定义的事件触发,例如用户push代码到对应的repo。

在Drone中scm(源代码管理工具)相当于发起者,当相关事件发生,如用户commit并push代码到repo中,源代码管理工具调用事先注册好的,在drone中预定义的web API,将数据(参数)传给web API并执行对应方法,触发整个build流程。

Drone build step 实际运行方式
  • Drone中所有step实际上都是在container中执行的(1.1 版本计划可以本地执行的step),用定义好镜像启动一个container,然后利用配置好的参数(用环境变量传入container)在container中执行相关命令,返回结果。

  • Drone实际是通过挂载 /var/run/docker.sock 实现和主机docker 守护进程进行通讯,实际调用docker API 实现对host主机的docker环境的使用和管理,如启动容器,缓存镜像等。

Drone 基本运行流程
  • Drone根据源代码管理工具webhook传来的数据,找到对应repo下边的drone.yaml文件,将drone.yaml文件中定义的 pipline解析成docker steps,实际就是把pipline中定义的step,解析成可以被docker API接受的参数格式,然后用这些参数,调用docker的API获取镜像、启动container并执行预定义命令,然后将container运行中log实时拉出(可以在web UI看到执行log),每一步执行完将返回的执行的结果(通过docker api返回的container的执行结果,成功或者报错),如果前一个依赖步骤执行失败后边就不会执行。drone在执行的过程中,会调用调用源代码工具的StatusService API,在源代码工具上加上pipline tag,来标识Drone的build状态。
    Drone 基本原理和流程
    Drone在运行过程会把各种状态同步到数据库中,在build结束后会把在内存流式存储的log同步到数据库中。

公众号:王司技术谈