相较于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
,启动结果截图如下:
如果是首次打开,会先去github请求授权,然后回调schema://drone.your_domain.com/authorize
,如截图:
其他配置 #
这部分就参见官方文档了
终止 #
到这里也只是完成了,配置和运行,但是CI和CD的功能,由于服务器关系没有深入。稍稍尝试了一下:
- 在自己的Repo中加入
.drone.yml
配置文件 - 设置好触发条件(如,push,merge)
- 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简单使用 #
最后 #
相比老牌CI,从支持和稳定性上来说,都还差一些。不建议用于生产(大牛除外),期待越来越好吧!!!