概要
Drone是Go语言编写的,基于容器技术的CI/CD系统。它具有以下几个关键特性。
Everything is a Docker Container
1 | 对Docker原生支持使的: drone无需在构建脚本中额外增加 docker 相关的命令就能: |
One Server, Multiple Agents
1 | Server与git平台交互, 提供web服务 |
Configuration as a code
1 | 使用.drone.yml文件来设定测试及部署流程 |
丰富的插件:
1 | 构建后发送消息: DingTalk, Wechat, Gtalk, Email |
调研其他CI/CD系统
需求
- 开源软件。可用于商业相关服务的自动化部署
- 尽量少一些运维部署操作。我们团队都是开发人员,没有专门的运维,开发人员主要工作是编码而不是其它
- 较好的支持k8s微服务。目前使用了比较多服务使用了k8s
- 尽量简单,适合小团队使用。服务部署完成后,项目组其他成员可以快速掌握使用
- 可以与我们搭建的gitlab私有仓库配合使用
常用的CI/CD系统
CI/CD已经形成了一套标准流程,有多个开源不开源的工具可以实现。常用的CI/CD工具有:
CI系统 | 是否开源 | 授权协议 | 开发语言 |
---|---|---|---|
Jenkins | ✅ | MIT | Java |
gitlab-ci | ✅ | MIT | Golang |
prow | ✅ | Apache-2.0 | Golang |
Strider | ✅ | MIT | JavaScript |
Travis | 🚫 | 商业软件 | Ruby |
teamcity | 🚫 | 商业软件 | Java .NET |
Codeship | 🚫 | 商业软件 | 未知 |
这其中:
1 | 1. Travis、Codeship、teamcity使用商用协议 |
Jenkins
优点:
1 | 功能完善、插件丰富: 有1000多个插件可供选择 |
缺点:
1 | 复杂: 1000多个插件, 不下大功夫, 如何知道应该用哪个插件 |
gitlab-ci
优点:
1 | 执行步骤在没有大的中, 自带版本控制 |
缺点:
1 | 配置复杂 |
drone安装
说明
drone支持各git仓库平台, 如github, gitlab, gogs, gitea等。使用不同的仓库平台,安装方式稍有不同。本文以gitlab为例进行说明,其他仓库平台请看文档
在Gitlab上创建OAuth应用
打开Application页面:
1 | 右上角头像 -> 设置(setting) -> 应用(Application) |
创建成功页面如下图所示:
1 | 需要记住下面两个值: |
创建共享密钥
共享密钥用于在Drone Server与各Drone Runner间通信认证时使用, 本篇使用内建的Server, 此值暂时用处不大, 不明白的可以先记住有这么一个事。
可用如下命令生成:
1 | $ openssl rand -hex 16 |
服务启动
服务启动命令如下:
1 | docker run \ |
环境变量参数说明
DRONE_GITLAB_SERVER:
1 | gitlab服务地址 |
DRONE_GIT_ALWAYS_AUTH:
1 | 可选bool型 |
DRONE_GITLAB_CLIENT_ID:
1 | 前面生成Application时得到的Application ID |
DRONE_GITLAB_CLIENT_SECRET:
1 | 前面生成Application时得到的Secret |
DRONE_RPC_SECRET:
1 | Drone Server与各Drone Runner间通信所需要的认证密钥, 即前面使用openssl命令得到的那串32字串 |
DRONE_SERVER_HOST:
1 | Drone Server服务的启动地址 |
DRONE_SERVER_PROTO
1 | Drone Server服务的协议 |
DRONE_TLS_AUTOCERT:
1 | Drone服务默认 |
DRONE_USER_CREATE:
1 | 设置 Drone 的管理员,格式为:username:<username>,admin:true |
说明
docker run启动成功后, 一个单节点的Drone就算是部署完成...
可以通过http://DRONE_SERVER_HOST或https://DRONE_SERVER_HOST访问了
参考
轻量快速的 CI 工具 Drone
官网