什么是Drone

Drone 是一个基于Docker的CI/CD工具,使用Golang开发,相对老牌Jenkins来说资源消耗相对小很多。

十一打算在lede软路由上搭建一套Blog程序,用来整理Wiz笔记里的文章。然后这一次打算尝试一下Markdown的静态Blog,所以打算将CI工具也一并搭建起来,然而因为软路由CPU和内存都比较差,就打算尝试一下Drone来配合我自己搭建的Gogs实现文章发布和自动构建。

安装Drone

安装和配置最开始参考的文章群晖上配置生产力工具 gogs + drone和作者的另外一篇Hugo + Gogs + Drone 搭建博客

1
docker pull drone/drone

然后按照文章中命令启动,再然后去Gogs中尝试测试Web hook是否正常,大概位置是在这里:

激活Repository

接下来开心的测试了一条推送(测试前需要在项目中放一个.drone.yml文件),看到绿色小勾勾瞬间就激动了,然后各种坑就开始了。

碰到的问题

  1. 推送了git后Drone的后台显示一直是Pending状态

    • 开始以为版本不兼容,各种升级降级版本,甚至看着参考的文章发布时间去hub.docker.com找,在文章发布到现在的版本挨个试了一遍。无果
    • 然后百度一圈没有什么有价值的中文资料(这货还是太小众?)
    • 找了个梯子去Google,在官方论坛发现官方人员发布的一篇文章Builds are Stuck in Pending Status,然后发现居然这东西还需要有一个drone/agent才能真正执行任务
    • 无奈
      1
      
      docker pull drone/agent
      
  2. 漫漫配(zhe)置(teng)路

    • 放弃前两篇文章配置跟着官方文档的这篇这篇重新配置
    • 然后官方文档版本也不够新
    • 最坑的是全部过程没有任何error信息,docker logs也没任何异常
    • 还是看官方论坛中其他人的问题,开启了DRONE_LOGS_TRACE=true日志,瞬间一屏一屏的error闪瞎了我的眼
    • 各种尝试后在docker-compose文件中指定了extra_hosts将gogs和drone server的域名指向内网ip
    • 这时候终于Pending可以结束了
    • 然后发现一个新坑,执行的log中显示每次都需要重新获取git中文件,并且会暂存在一个叫/drone/src的目录
    • 然后……这个clone每次需要将近一分钟时间去执行
    • 映射了本地的目录给drone/dronedrone/agent,但没有任何卵用,而且agent执行时候映射的/drone/src本地路径中并没有任何文件
    • 这时候发现docker images看到多了一个叫drone/git的image,猜测因为缺失git需要去自行下载一个git的docker实例来执行git命令,这个agent居然不自带git??
    • 映射本地git/usr/bin/git给drone agent,然而没任何用处,好吧每次不就是要重新clone整个项目么,就整个clone好了(当然貌似Jenkins也这么干?)
  3. 新一轮尝(cai)试(keng)

    • 尝试用前两篇文章的配置来发布文章到git pages
    • 失败
    • 换了一个新的docker imagesplugins/gh-pages
    • 失败
    • Google出来的其他images
    • 失败
  4. 放弃 花了一晚上的时间,还是简单的通过原始的shell来实现半自动更新文章了事。

结论

有时间的话可以去把官方的文档重新翻一遍,但是有那时间我为啥不在其他服务器上找一个机器配置Jenkins呢???

社区和生态真的很重要,即便这个Drone可能性能、内存或者设计理念等等比Jenkins会更优秀,但应该在使用人数和生态完善起来之前不会再去尝试了。

日志很重要,头一次看到一个很重要的应用是把error默认吃掉的,而且agent执行job的时候,返回的错误信息也是各种模糊不清……

后记

如果再有可能,我应该会再尝试Github去年发布的新的CI工具:GitHub Actions,而不是这种受众小一些的产品。

Mark一下GitHub Actions的文章