持续集成-droneCI简介

持续集成-droneCI简介

导航

  1. 背景
  2. 简介
  3. 注意事项
  4. 使用场景

背景

先说几句闲话,docker这个概念刚出的时候,我其实已经关注到了。
大概在14年到15年时,我已经在非生产环境推行docker了,尝试将例如原来在使用 zabbix, nginx, tomcat, memcache等, 以及一些小的管理系统,还有一些工作中自己开发的python服务给容器化。

但之后几年时间反复前进后退,没有什么实质行的进展。
直到18-19年上云的大背景下,才集中一波将当时项目的生产环境的业务给容器化。

原因一直很清楚,就是上容器很简单,但是更新困难。

比如 python 程序,你发现有个字符串需要改, 原本直接 vi 编辑加 restart 即可;
现在却要提交代码,重新打镜像,上传,拉镜像,更新服务,步骤太繁琐啦。

为什么不自动化实现这些步骤呢?

原因是当时要实现这些,基本上只有两种方案,

  1. 写大量shell脚本
  2. jenkins

我以前写过很多 bash 脚本,几乎写吐,实在是不想写了,被里面各种特性,各种奇淫技巧,和隐藏的各种陷阱杀害了太多脑细胞。
而且很明显 bash 并不适合完成太大的流程。

然后就是 jenkins, 我从14年开始接触这个工具,直到今天我依然不喜欢,复杂+繁琐,我几乎每年都要重新学一遍,然后再忘一遍。

直到 drone 这个系统的出现,终于感觉有个好用 CI 工具的了。

drone 简介

  1. go 开发,意味着部署简单
  2. master+slave 结构,扩展方便
  3. 容器化,全程使用 docker 完成
  4. 插件支持友好

我个人认为最大的优点是 插件友好;

插件简介

  1. 一个插件就是一个容器,简介
  2. 插件无依赖关系,对离线环境极为友好;
    jenkins 的离线环境装更新插件就非常难处理依赖关系;
    当然 jenkins 离线首次安装时插件可以直接拷贝进去,但后面再加就不好办了
  3. 插件支持 go 开发,也支持 sh 开发
  4. 无用户体系,直接使用 git 源的账户系统
  5. 编排文件 .drone 采用 yml 结构,比 Jenkis 的 Jenkinsfile 文件格式友好太多

而且可以很方便的看到部署流程图
流程图

缺点

有几个不得不说的注意事项

drone 分开源版本和企业版本;
开源版本需要自己编译生成二进制文件或镜像; 官方释放出来的包其实是企业版本的;

企业版本默认是有很多限制的, 但在特定情况下是可以免费使用的;

  1. 一年构建次数不超过 5000 次
  2. 企业年收入低于 100 万美元, 或融资少于 500 万美元

主要就这个限制, 超出后按协议需要付费;

个人使用的话,一般一年不会超出这个次数限制;

企业使用的话,其实影响也不大,
到次数前把库删除服务重新部署一份就是,
受影响的也就 保存的一些 secret 和 构建历史记录, 这些都好重建或干脆删除;

如果对这个商用协议很敏感的话,还有2个办法

  1. 通过开源版本自己编译一份
  2. 使用完全开源的 woodpecker(啄木鸟) 来平替 drone

使用方式

  1. 物理机方式
    部署一个 server 和 一个以上 runner
  2. docker-compose 方式
  3. k8s 内部署方式

不同的部署方式影响一些插件的使用和 pipeline 的类型;

微信搜索IT运维小秋

Licensed under CC BY-NC-SA 4.0
转载或引用本文时请遵守许可协议,知会作者并注明出处
不得用于商业用途!
最后更新于 2023-03-17 00:00 UTC