内容简介:Drone是一个CI/CD的新起之秀,drone的主要特性就是所有的CI/CD流程都是借助Docker容器来构建。所以Drone的pipline非常容易书写和维护。并且由于直接把Docker容器当做一等公民,那么我们在各种场景下定制化自己的插件也将变得非常便利。因为最终Drone都是调用的插件Docker容器,所以开发团队可以使用任意自己熟练擅长的语言去定制内部自定义插件。本文我们一起动手用Go写一个drone插件!通过一个完整的简单的流程,我们一起学习如何定制化自己的CI/CD流程。baba再也不用担心C
Drone是一个CI/CD的新起之秀,drone的主要特性就是所有的CI/CD流程都是借助 Docker 容器来构建。所以Drone的pipline非常容易书写和维护。并且由于直接把Docker容器当做一等公民,那么我们在各种场景下定制化自己的插件也将变得非常便利。因为最终Drone都是调用的插件Docker容器,所以开发团队可以使用任意自己熟练擅长的语言去定制内部自定义插件。
本文我们一起动手用Go写一个drone插件!通过一个完整的简单的流程,我们一起学习如何定制化自己的CI/CD流程。baba再也不用担心CI/CD不够完善了!
前期准备
-
Docker Hub 账户,为了简化流程,所以我们此次把我们的插件镜像发布到公共镜像仓库。
-
Golang 开发环境,这个不用多说了:wink:
-
Docker 本地环境,用来构建和发布我们插件的镜像。
设计插件接口
首先我们要关注,当我们在写Dronefile(.drone.yml)的时候,我们需要Drone给我们的插件传递什么信息:
“
Drone在启动我们的镜像的时候会把 settings
字段下的参数以前缀为 PLUGIN_
的 全大写环境变量 的方式传入给插件。
”
PLUGIN_CHANNEL=general PLUGIN_WEBHOOK=https://hooks.slack.com/services/... PLUGIN_TEXT=hello
注意:Drone传递给插件的环境变量支持大部分的数据类型比如:string, integer, float, boolean, arrary等。传入数组时是一个以逗号分隔的字符串。比如有如下配置文件:
... settings: names: [ john, tom]
那么传递的参数是下面这样的:
PLUGIN_NAMES=john,tom
开始写代码
我们在之前的设置中给我们讲要写的插件传递了两个参数
-
webhook:一个需要插件去请求的URL
-
data:代表我们想传递给插件的数据
接下来我们就在我们的Go代码中使用它们,下面是一个简单的示例:
发布测试
接下来我们将要把我们写好的插件打包成Docker镜像,然后发不到Docker Hub上,最终我们在我们的Drone平台上来测试这个插件。
编译
为了最小化我们的插件,我们将要使用 alpine
镜像来构建我们的插件,如果你不清楚如何最小化构建Docker镜像,可以翻阅作者的历史文章,里面记录了一些Dockerfile最佳实践的方法。话不多说开始吧!
先编译好alpine的目标二进制文件:
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o my-awesome-plugin
然后基于此可执行二进制我们就可以构建我们的插件了,下面是一个简单的Dockerfile示例:
构建发布
下面的流程就比较简单了,使用Docker来构建你自己的公有镜像并发不到Docker Hub就可以了,如果你对这里不太熟悉的话,可以去看看官网文档,或者使用 docker build -h
和 docker push -h
来查看帮助文档。这里笔者只列出自己构建的命令:
docker build -t dayuoba/my-awesome-plugin .
docker push dayuoba/my-awesome-plugin
等待一会儿就好了,如果这里你想偷懒你可以直接用笔者构建好的镜像来测试。 docker pull dayuoba/my-awesome-plugin
测试插件
接下来我们就可以测试我们的插件了,初始化好一个Drone下的项目,添加 .drone.yml
文件。然后push等待测试即可。
接下来就是去Drone上面看看我们的构建日志来测试我们的插件了。
总结
到这儿,这篇文章基本就结束了,参照这个思路你就可以按照自己业务的需求来构建自己的Drone插件了。
以上所述就是小编给大家介绍的《用Go写drone插件》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- IDEA 插件:多线程文件下载插件开发
- 从头开发一个Flutter插件(二)高德地图定位插件
- Gradle插件开发系列之gradle插件调试方法
- Gradle插件开发系列之开发第一个gradle插件
- WordPress插件开发 -- 在插件使用数据库存储数据
- Gradle插件开发系列之发布gradle插件到开源库
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。