drone
什么是drone
Drone 是一个基于 Docker 的云原生的持续集成/部署工具,能支持四种 git 托管服务(github, gitlab, gogs, gitea) 而 drone-server 预先知晓了对应托管服务的 API,drone 的很多功能比如拉取 git repo list/add webhook to repo 都是通过这些 API 完成的。
前期准备
首先准备好服务器(也可以本地搭建),其次了解一些基础的docker操作和linux命令。因为此次是基于阿里云服务器进行,所以本地搭建不做介绍。
- 服务器: 阿里云(1核2G) centOS 7.7.1908
- mysql:5.7 (5.7及以上,低版本会产生gogs报错主索引长度不够 Specified key was too long; max key length is 764 bytes )
- drone/drone:1.0.0-rc.5 #关联git仓库,解析yml 注入变量
- drone/drone-runner-docker:1.0.1 #运行yml解析的drone流水线
安装drone
-
拉取镜像。
docker pull drone/drone:1.0.0-rc.5 docker pull drone-runner-docker:1.0.1
-
网上大多数据采用的docker-compose(详情直接搜gogs+drone),但是我们这里采用分步搭建。
- 安装drone
docker run \ --publish=3000:80 \ --volume=/opt/data:/data \ --env=DRONE_OPEN=true \ --env=DRONE_GIT_ALWAYS_AUTH=false \ --env=DRONE_SERVER_HOST=drone.mydomain.club \ --env=DRONE_DEBUG=true \ --env=DRONE_SERVER_PROTO=http \ --env=DRONE_PROVIDER=gogs \ --env=DRONE_GOGS=true \ --env=DRONE_GOGS_SERVER=http://git.mydomain.club \ --env=DRONE_DATABASE_DATASOURCE=drone:drone@tcp(xxx.xx.xx.xx:3306)/drone?parseTime=true \ --env=DRONE_DATABASE_DRIVER=mysql \ --env=DRONE_RPC_SECRET=drone.mydomain.com \ --env=DRONE_USER_CREATE=username:zRainy,admin:true \ --restart=always \ --detach=true \ --name=drone \ drone/drone/drone:1.0.0-rc.5
- 需要特别注意的几个变量(--env): - `DRONE_GIT_ALWAYS_AUTH` 使用gogs的使用必须为false,因为gogs不支持验证登录。 - `DRONE_SERVER_HOST` 最后访问的网址host,可以用ip+端口,使用域名需要代理到对应的端口上,例如我这里是用的主机3000端口映射容器80端口,就需要代理到3000端口上。 - `DRONE_PROVIDER,DRONE_GOGS,DRONE_GOGS_SERVER` 使用gogs作为git的固定配置,需要特别注意的是,这里的git地址,需要测试http和ssh方式clone是能完成,否则会影响后续的构建。 - `DRONE_DATABASE_DRIVER,DRONE_DATABASE_DATASOURCE` 使用mysql数据库的默认配置,需要自己建库,测试能链接上即可,需要注意版本不小于于5.7,避免`Specified key was too long; max key length is 764 bytes `错误。 - `DRONE_RPC_SECRET` 与drone-runner-docker通讯的秘钥,这个字段可以随便定义,但是需要和后续在drone-runner-docker中配置的这个字段一致即可。 - `DRONE_USER_CREATE` 超级管理用户,这个可以用能设置drone构建的时候仓库为可信任的,只有这种模式下才能运行通过yml挂载主机的卷。 - 查看安装成果,访问`DRONE_SERVER_HOST`对应的http地址,能打开使用gogs账号登录即成功。(第一次建议直接使用ip+port方式搭建,能少很多坑和步骤。)
- 安装drone-runner-docker
$ docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ --env=DRONE_RPC_PROTO=http \ --env=DRONE_RPC_HOST=drone.mydomain.club \ --env=DRONE_RPC_SECRET=drone.mydomain.com \ --env=DRONE_LOGS_TRACE=true --env=DRONE_LOGS_DEBUG=true --restart always \ --name runner \ drone/drone-runner-docker:1
- 这里的挂载文件
/var/run/docker.sock:/var/run/docker.sock
是必须的,没有这个参数没有使用主机docker操作的权限。 - 需要特别注意的变量:
DRONE_RPC_HOST
与上面drone的配置的DRONE_SERVER_HOST
字段相同。
DRONE_RPC_SECRET
与上面drone的配置的DRONE_RPC_SECRET
字段相同。
至此,安装drone完毕。
-
测试gogs和drone是否关联。
- 打开gogs的链接,用户登录,建造仓库。
- 打开drone的链接,用户登录,更新列表,将新建的仓库设置为
Activate repository
- 在gogs对应仓库>仓库设置>管理web钩子查看是否有一个名为 drone的链接/hook的钩子。有就点击,没有检查1 2 是否完成。
- 点击之后的页面是设置这个钩子的页面,直接滚动到底部,点击测试推送。
- 如果正确返回了证明gogs和drone已经关联上了。
- 准备一个.drone.yml文件,请用下文件测试,避免yml文件编写bug影响判断结果。
kind: pipeline name: default steps: - name: test image: alpine commands: - echo 'echo success'
- 推送到仓库之后,drone的链接icon应该已经开始转动,点击查看这个仓库的构建,在详情内能看输出
success
即成功。(这里如果gogs设置了必须验证密码会导致git clone失败。拉不下来仓库,需要进行配置密码账号或者ssh,如果是第一次搭建建议在搭建gogs的时候,install环境不要勾选需要登录后浏览
)
-
基于gogs+drone的流程已经完成,下一篇会分享几个常用的
.drone.yml
配置文件,方便自己自己copy,需要的可以看看。