`
January 27, 2018 本文阅读量

Drone体验

相较于Jenkins,Gitlab-CI...等,尝试Drone的首要原因是,天生的docker支持。不用去操心部署CI或者CD的环境配置等等烦心事。只需要上手,如何配置这个CD工具,让我使用更加畅快和顺手。

相较于Jenkins,Gitlab-CI…等,尝试Drone的首要原因是,天生的docker支持。不用去操心部署CI或者CD的环境配置等等烦心事。只需要上手,如何配置这个CD工具,让我使用更加畅快和顺手。

安装部署

前提:已经安装了docker,docker-compose,并基本掌握docker用法,基本熟悉docker-compose配置文件

pull镜像

docker pull drone/drone:0.8  # droner-server 镜像
docker pull dorner/agent:0.8 # drone-agent 镜像

也可以跳过这一步,docker运行的时候,如果匹配不到本地镜像,会自动拉取。

docker-compose.yml配置文件

为了方便,新建一个Drone文件夹,目录结构如下:

--Drone                  # 文件夹
  |---docker-compose.yml # docker-compose 配置文件
  |---data               # 用于挂载的数据文件
  |---drone.domain.com   # nginx sever 配置文件
  `---other.file         # 其他文件

已知文件结构后,编写的docker-compose.yml文件如下:

version: '2'

services:
  drone-server:
    image: drone/drone:0.8
    container_name: drone-server
    ports:
      - 8000:8000
      - 9000:9000
    volumes:
      - ./data:/var/lib/drone/ # 在没有跟数据库绑定的情况下,默认使用sqlite数据库
    restart: always
    environment:
      - DRONE_OPEN=false
      - DRONE_HOST=http://127.0.0.1:8000 # 最好是在服务器上,localhost无法收到webhook的通知
      - DRONE_ADMIN=yourname

      - DRONE_GITHUB=true
      - DRONE_GITHUB_CLIENT=7bc7971bxxxxx # 需要预先注册一个github oauth应用
      - DRONE_GITHUB_SECRET=9456c630xxxxxxxxxxxxxx

      - DRONE_SECRET=secret
      - DRONE_DEBUG=false

  drone-agent:
    image: drone/agent:0.8
    container_name: drone-agent
    command: agent
    restart: always
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_SERVER=drone-server:9000
      - DRONE_SECRET=secret
      - DRONE_DEBUG=true

启动Drone

启动就很简单了,Drone目录下执行:docker-compose up -d,启动结果截图如下: Drone-starting.png 如果是首次打开,会先去github请求授权,然后回调schema://drone.your_domain.com/authorize,如截图: Drone-running-web.png

其他配置

这部分就参见官方文档

终止

到这里也只是完成了,配置和运行,但是CI和CD的功能,由于服务器关系没有深入。稍稍尝试了一下:

  1. 在自己的Repo中加入.drone.yml配置文件
  2. 设置好触发条件(如,push,merge)
  3. push代码触发,这时候刷新页面,便能看见,Drone的pipeline处于运行中

然而也没那么顺心

诚然Drone安装部署比其他CI工具简单很多,但是在使用过程中也遇见了不足:

  • 文档不足,显得粗燥,网上也没有太多的教程文档。
  • 对于gitlab并非完全支持。精力有限,只尝试了gitlab和github,其中gitlab API=v3,v4 均未成功,github一次成功。
  • 相较于Jenkins,Drone似乎没有主动执行构建的可能性。可以参见Drone与Jenkins的优劣

Drone与Jenkins的优劣

对比项 Jenkins Drone
安装部署 一般(如果不采用docker部署) 非常简单
配置复杂度 复杂,需要进行插件配置,账户管理.. 一个配置文件
权限管理 独立 依赖VCS
能否手动触发 不能
是否支持pipeline 不支持 支持
界面复杂程度 复杂 简单
开发语言 Java Golang
是否支持docker部署 支持 支持
构建时对环境依赖程度 脚本+docker 全程在docker中

Drone简单使用

玩腻了Jenkins,也来玩玩Drone CI

最后

相比老牌CI,从支持和稳定性上来说,都还差一些。不建议用于生产(大牛除外),期待越来越好吧!!!