超轻量级自动化部署神器Drone安装详细教程(图文教程)
前言
现在我们在日常开发或者生产环境中,往往会经常弄一套自动化部署方案来节约时间成本。现在比较流行的一种就是Gitlab+Jenkins
实现方案,但是这种方案占用内存还是比较大,需要的服务器内存也得8G左右,不然很难流畅运行,而且部署起来也不快。最近小翔发现了一款神器 Drone ,轻量级的CI/CD工具,我拿来结合 Gogs 使用所消耗的内存占用都不到1G,这里就给大家聊聊这款工具。
Drone简介
Drone是一款基于go编写的容器技术持续集成工具,可以直接使用YAML配置文件即可完成自动化构建、测试、部署任务。
优势:
drone引入pipline的概念,整个build过程由多个stage组成,每一个stage都是docker。
- 各stage间可以通过共享宿主机的磁盘目录, 实现build阶段的数据共享和缓存基础数据, 实现加速下次build的目标
- 各stage也可以共享宿主机的docker环境,实现共享宿主机的docker image, 不用每次build都重新拉取base image,减少build时间
- 可以并发运行。多个build可以并发运行,单机并发数量由服务器cpu数决定。 由开发者负责打包image和流程控制。Docker-in-docker,这一点非常重要,一切都在掌握之中。相比jenkins的好处是,所有的image都是开发者提供,不需要运维参与在CI服务器上部署各种语言编译需要的环境。
是DevOps的最佳实践!
使用教程
因为本篇文章是用 Gogs
的git版本管理存储代码,安装可以参考我上一篇文章, Gogs安装部署
Drone下载安装
使用Docker安装几秒就完成
- 下载Drone和Runner的镜像
1 |
|
这里有个Server和Runner的概念,我们先来理解下;
- Server:为Drone的管理提供了Web页面,用于管理从Git上获取的仓库中的流水线任务。
- Runner:一个单独的守护进程,会轮询Server,获取需要执行的流水线任务,之后执行。
1. 安装 Drone server
1 |
|
这里的配置参数比较多,下面统一解释下;
- DRONE_GOGS_SERVER:用于配置Gogs服务地址,可以直接是IP
http://192.168.31.114:10080
- DRONE_RPC_SECRET:Drone的共享秘钥,用于验证连接到server的rpc连接,server和runner需要提供同样的秘钥。
- DRONE_SERVER_HOST:用于配置Drone server外部可访问的地址。
- DRONE_SERVER_PROTO:用于配置Drone server外部可访问的协议,必须是http或https。
- DRONE_USER_CREATE:创建一个管理员账号,该账号需要在Gogs中注册好。
- DRONE_GOGS_SERVER:用于配置Gogs服务地址,可以直接是IP
2. 安装drone-runner-docker
- 当有需要执行的任务时,会启动临时的容器来执行流水线任务
1 |
|
这里的配置参数比较多,下面统一解释下。
- DRONE_RPC_PROTO:用于配置连接到Drone server的协议,必须是http或https。
- DRONE_RPC_HOST:用于配置Drone server的访问地址,runner会连接到server获取流水线任务并执行。
- DRONE_RPC_SECRET:用于配置连接到Drone server的共享秘钥。
- DRONE_RUNNER_CAPACITY:限制runner并发执行的流水线任务数量。
- DRONE_RUNNER_NAME:自定义runner的名称。
Drone使用
打开Drone, IP + 3080 登录Gogs的管理员账号就可以进入控制台了,访问地址:http://192.168.31.114:3080/
- 登录进去后,我们可以看到已经有了gogs中的项目,如果没有,可以点击右上角的
SYNC
按钮。
- 配置仓库,使Drone创建的容器能够挂载到宿主机上
- 选中仓库点击
ACTIVATE
后,设置仓库
->勾选 Trusted
->SAVE
保存。
- 保存成功后我们进入 Gogs 管理面板,打开刚才操作的这个项目查看 WEB钩子是否配置成功
(可选) 添加Secret
drone保证了安全访问,我们不用在配置文件明文输出密码等敏感值,可以添加 Secret
,如果觉得没有必要也不用添加,直接在后面的 drone.yml
文件中配置明文密码就行。
Drone.yml详解
- 当我们向Git仓库Push代码时,会自动触发Web钩子,然后Drone就会从Git仓库Clone代码,再通过项目目录下的
.drone.yml
配置,执行相应的流水线,接下来我们来看看这个脚本是如何写的。
在仓库的根目录下创建.drone.yml
配置文件
配置文件参考如下配置:
1 |
|
注意:
- 确定好自己宿主机挂载的目录
build-start
和re-start
我判断了主分支(master)和子分支(dev)提交执行不同的步骤,这两个是对冲的,每次只会执行其中一个,主要是优化不用每次都重新构建镜像,通过挂载jar包方式启动,宿主机里的jar包更换后直接重启容器就行了,节省了一部分时间。不需要的可以直接删掉when
判断就行了可以学习一下 drone 的判断语法: https://docs.drone.io/pipeline/docker/syntax/conditions/#by-branch
run.sh
执行脚本可以实现打包应用和运行容器镜像,配置如下:
1 |
|
restart.sh
执行脚本可以实现重启容器,配置如下:
1 |
|
Dockerfile
文件配置如下:
1 |
|
- 文件编写完成后,git push到仓库中,gogs会通知drone进行部署,drone找到
.drone.yml
配置文件,就会按照配置文件中的步骤进行构建了,部署期间可以在drone中查看到每一步的部署情况
- 钉钉通知成功
答疑
yml文件是否必须存放在git repository根目录
是的,必须在根目录
yml文件名是否必须是.drone.yml
默认是文件名是.drone.yml,也可以能过drone web管理界面修改yml的文件名
git提交代码如何让drone跳过本次提交,不执行pipeline
提交代码时通过备注增加[CI SKIP]跳过,如: git commit –m “first commit [CI SKIP]”
drone web界面repository设置项Project settings中没有Trusted
Drone Server启动时要指定DRONE_USER_CREATE参数,用来设置管理员帐号,只有用管理员帐号打开drone web界面才可以看到和设置Trusted
钉钉通知Token如何获取
可以百度,都挺简单的,获取到token后再添加到drone控制台的
Secrets
中,取名dingtalk_token
总结
总体使用下来还是很不错的,构建速度上面可以再优化,使用脚本来定义流水线任务无疑更简单、更直观。Drone更加轻量级,内存占用少且响应速度快。如果团队人员不是很大的话,还是很推荐大家使用的!
参考资料:
项目源码地址: