Drone是一个用Go语言开发的基于容器运行的开源持续集成软件。
Drone的github官方地址是:https://github.com/drone/drone
官方说明文档(英文)地址是:https://docs.drone.io/
截止我写完这篇文章,Drone的release版本为1.7.0
所以本文以1.7.0为例说明drone的部署,由于Drone1.X前的版本有兼容性的问题,所以1.0之前的版本是不适用于本文所写的内容。不过相信应该大家都是用的新版本。
部署方法
Drone作为一个开源持续集成工具,和Jenkins不一样的是,他本身不带有用户管理系统,而是对接的代码管理系统。所以根据自己目前使用的代码仓库管理系统来进行部署。这里以gitlab社区版为例进行部署,其他的部署方式都大同小异,基本一样,参考下官方说明文档即可。
单Drone服务
创建一个OAuth应用程序
创建一个GitLab OAuth应用程序。使用者密钥和使用者密钥用于授权访问GitLab资源。


- 授权回调URL必须与是正确的drone服务器地址,而且要在地址的结尾加上/login。
- 举例drone的地址为http://drone.com.cn,则回调地址为http://drone.com.cn/login
创建slave通讯密匙
创建一个共享密钥,以验证slave runner与Drone服务器之间的通信。
这里可以使用openssl生成共享密匙:
openssl rand -hex 16
docker启动
使用以下命令启动服务器容器。容器是通过环境变量配置的。有关配置参数的说明,会在下面解释。
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITLAB_SERVER=https://gitlab.com \
--env=DRONE_GITLAB_CLIENT_ID={{DRONE_GITLAB_CLIENT_ID}} \
--env=DRONE_GITLAB_CLIENT_SECRET={{DRONE_GITLAB_CLIENT_SECRET}} \
--env=DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \
--env=DRONE_SERVER_HOST={{DRONE_SERVER_HOST}} \
--env=DRONE_SERVER_PROTO={{DRONE_SERVER_PROTO}} \
--publish=80:80 \
--publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1
-
DRONE_GITLAB_CLIENT_ID
GitLab oauth客户端ID。 -
DRONE_GITLAB_CLIENT_SECRET
GitLab oauth客户端密钥 -
DRONE_GITLAB_SERVER
GitLab服务器网址,例如https://gitlab.com -
DRONE_GIT_ALWAYS_AUTH
克隆公共存储库时进行身份验证,这个是可选的选项,为bool值 -
DRONE_RPC_SECRET
上一步生成的通讯密匙 -
DRONE_SERVER_HOST
drone的服务器地址,例如drone.com.cn -
DRONE_SERVER_PROTO
drone的访问协议,如http或者https。如果设置了acme的话,这里默然为https
数据会挂载到/var/lib/drone这个目录,如果需要备份数据,则备份这个目录即可
更多的环境变量配置可以参考官方文档:https://docs.drone.io/server/reference/
slave runner节点部署
上面的drone服务器安装完成后,如果需要增加slave runner,则可以自己部署slave
选择部署的slave类型
drone的slave类型也有很多,比如Windows、Linux的Docker Runner、kubernetes Runner、ssh Runner、Exec Runner。
根据实际情况,我们可以选择性的部署,或者都部署,并为部署的节点打上标签,方便在不同的情况下使用,这里以Linux的Docker Runner为例,举例说明如何部署。其他的部署方式,可以参考官方文档:https://docs.drone.io/runner/overview/
Linux Docker Runner
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=https \
-e DRONE_RPC_HOST=drone.company.com \
-e DRONE_RPC_SECRET=super-duper-secret \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_LABELS=linux \
-e DRONE_RUNNER_MAX_PROCS=10 \
-e DRONE_RUNNER_NAME=slave-runner \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=${HOSTNAME} \
-p 3000:3000 \
--restart always \
--name runner \
drone/drone-runner-docker:1
-
DRONE_RPC_HOST
Drone的服务器地址,例如drone.com.cn -
DRONE_RPC_PROTO
Drone的连接协议,必须是http或者https -
DRONE_RPC_SECRET
部署Drone的时候生成的通讯密匙 -
DRONE_RUNNER_LABELS
给runner打个标签,方便标识 -
DRONE_RUNNER_NAME
给runner取个名字,方便标识 -
DRONE_RUNNER_MAX_PROCS
runner可以运行的单个管道最大并发步骤数(就是一个pipeline里面,可以同时跑的任务) -
DRONE_RUNNER_CAPACITY
runner可以运行的最大并发管道数(可以同时运行几个pipeline)
部署成功后打开
部署成功后,直接输入DRONE_SERVER_HOST
的地址,能够成功访问就可以了,在右上角可以登录,登录的时候自动跳转到gitlab,然后登录gitlab的账户即可。drone的仓库访问权限和gitlab是相同的。如果在drone中看不到自己的项目,可以点击sync同步下仓库信息