首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Drone的pipeline原理与代码分析

技术干货,第一时间推送

最近的一个项目,需要实现一个工作任务流(task pipeline),基于之前CICD的经验,jenkins pipeline和drone的pipeline进入候选。

drone是基于go的cicd解决方案,github上有1.6万+star,本文简单对比了其和jenkins的区别,重点介绍了drone的pipeline原理,并简单分析了代码。

jenkins 与 drone

drone pipeline好处是相对更轻量级,yml定义也相对简洁清晰,按照功能来划分容器,可以方便的实现task的复用,而jenkins则是完全打包到一个镜像,会造成单个镜像体积过大,比如jenkins的单个镜像超过2G。

drone的pipeline,是基于https://github.com/cncd/pipeline 实现的,这里简单分析下其原理。

编译和执行 drone pipeline

要了解一个程序的原理,先从输入输出讲起。

先安装:

Copy

然后测试

Copy

pipeline.yml 定义文件

pipeline.json 编译后的配置文件

.env 环境变量

先来查看 定义

Copy

上面的yml定义了:

工作目录workspace

初始化工作,git clone仓库,仓库地址在.env里定义

然后是定义pipeline,

pipeline下面是step数组,这里只有一个build

使用golang:1.7镜像

构建命令在commands数组里定义

通过compile配置文件:

Copy

查看编译后的

Copy

简单分析结构:

pipeline 定义了执行的stage,每个stage有一个或者多个step

networks、volumes、secrets 分别定义网络、存储和secrets

通过network,实现container互通

通过volumes实现数据共享

最后执行,通过:

Copy

pipeline 原理分析

编译过程

可以形象的理解为 .env+pipeline.yml --> pipeline.json

编译过程不复杂,主要是解析pipeline.yml为:

Copy

然后转换为json对应的config:

Copy

该部分主要代码在pipeline/frontend里

执行过程

我们主要关注执行过程,主要代码在pipeline/backend里。

首先是读取配置文件为backend.Config

Copy

然后创建执行环境,目前的代码仅docker可用,k8s是空代码。

Copy

接着开始执行

Copy

其中pipeline.NEW创建了对象;

Copy

其中Engine,操作容器的interface,目前仅docker可用。

Copy

关注Run:

Copy

重点在于使用errgroup.Group通过协程方式运行step:

Copy

-深入原理-

 知其然并知其所以然

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210118A0CZWW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券