drone教程-1.搭建

简介

用了很多ci的工具,比如jenkins,gitlabci等,最终发现,适合自己的只有drone,这篇博客不是介绍drone有多少的好用,只是介绍如何去搭建drone

drone的介绍

drone 他和大部分的ci工具一样分为server端和agent端或者说runner端,所以搭建它也分为搭建server端和agent端,但是有一个不好的地方就是,你在server端是看不到我这个server连接了几个agent,但是这个不是什么问题,因为drone会给你找到最合适的agent去编译,你只需要在.drone.yml文件中定义就好了

drone目前支持以下git平台

  • github
  • gitlab
  • gogs
  • gitea
  • bitbucket cloud
  • bitbucket server

如果你使用比如码云,那你可以考虑不要使用drone了

每个平台搭建的时候只有定义的环境变量有些不同,其他都是差不多的,下面我介绍的是在gitlab下,因为我个人使用的是gitlab

搭建drone server之前的准备

drone和jenkins不一样的是,drone和gitlab,github是无缝集成的,所以在搭建之前第一步需要你在gitlab上创建一个OAuth应用,这样drone才可以通过OAuth接口获取用户在gitlab上的所有信息,但是这样的方式也会造成一个问题,就是如果公司内部其他人的项目,不能给这个账号授权的项目就要重新搭建一个server了,好在小公司没有这样的问题存在

gitlab创建oauth应用的方式很简单,直接登录点击设置然后点击application,输入名字并且赋予权限点击保存应用就好了

要注意的是Redirect URI这里一定要写drone的url加/login,比如下面

https://drone.example.cn/login

创建完成之后会有Application IDSecret这两个东西之后的docker-compose.yaml需要这两个参数

生成共享秘钥

这个共享秘钥其实可以是任何值,用来验证drone server和runner之间的通信,如果你不知道创建什么值的话可以使用下面的方式

openssl rand -hex 16

编写compose文件

首先给大家看下我的compose文件,仅做参考

https://github.com/bboysoulcn/awesome-dockercompose/blob/master/drone/drone/docker-compose.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3"
services:
drone:
image: "drone/drone:1.6.5"
container_name: "drone-server"
restart: "always"
volumes:
- "/etc/localtime:/etc/localtime"
- "drone-data:/data"
ports:
- "80:80"
environment:
- "DRONE_AGENTS_ENABLED=true"
- "DRONE_GITLAB_SERVER=https://gitlab.example.cn"
- "DRONE_GITLAB_CLIENT_ID=client_id"
- "DRONE_GITLAB_CLIENT_SECRET=client_secret"
- "DRONE_RPC_SECRET=secret"
- "DRONE_SERVER_HOST=drone.example.cn"
- "DRONE_SERVER_PROTO=https"

volumes:
drone-data:

大部分东西都不用修改,只要修改environment中对应的参数就好了

  • DRONE_GITLAB_CLIENT_ID gitlab的client_id
  • DRONE_GITLAB_CLIENT_SECRET gitlab的client_secret
  • DRONE_GITLAB_SERVER gitlab服务器地址
  • DRONE_RPC_SECRET 这个填写我们刚才生成的预共享秘钥
  • DRONE_SERVER_HOST 你drone对外的地址
  • DRONE_SERVER_PROTO drone对外地址的的协议

DRONE_SERVER_HOST 和 DRONE_SERVER_PROTO 这两个参数当你在drone中点击active的时候drone会合并添加到gitlab项目webhook中,所以如果你项目提交了,但并没有触发drone的自动构建,你可以看看是不是因为这两个参数的原因,比如使用的是https的,但是上面写成了http导致添加到项目的webhook地址为http://drone.example.cn/hook然后就不触发构建了

编写完成之后使用docker-compose启动就好了

安装runner

runner的安装也很简单,直接上compose文件

https://github.com/bboysoulcn/awesome-dockercompose/blob/master/drone/runner/docker-compose.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: "3"
services:
runner:
image: "drone/drone-agent:1.6.2"
container_name: "drone-runner"
restart: "always"
volumes:
- "/etc/localtime:/etc/localtime"
- "/var/run/docker.sock:/var/run/docker.sock"
ports:
- "3000:3000"
environment:
- "DRONE_RPC_PROTO=http"
- "DRONE_RPC_HOST=drone_drone"
- "DRONE_RPC_SECRET=secret"
- "DRONE_RUNNER_CAPACITY=2"
- "DRONE_RUNNER_NAME=drone-agent-4"

和server一样,只需要动environment的变量就好了

  • DRONE_RPC_PROTO drone server 的协议http或者https
  • DRONE_RPC_HOST drone server的域名或者ip
  • DRONE_RPC_SECRET 之前说过的共享秘钥和server的要一样
  • DRONE_RUNNER_CAPACITY 运行的最大pipeline
  • DRONE_RUNNER_NAME 运行的runner的名字

最后说几句

其实其他比如github gogs的drone搭建的方式都是一样的就是environment有几个环境变量不一样,个人觉得和别的ci工具比起来drone是最好使用的,而且也是支持各种插件的相比于jenkins对于容器的支持更好,个人小团队使用是很nice的

欢迎关注Bboysoul的博客www.bboy.app

Have Fun

欢迎关注我的其它发布渠道