Drone开源持续集成工具——部署教程篇

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资源。

gitlab_token_create.png
UTOOLS1588920592860.png
  • 授权回调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同步下仓库信息