文章目录
一、drone简介
drone是一个golang编写的轻量级持续集成平台,它是原生Docker,所有的进程都在容器内进行。这使得Drone非常适合像Kubernetes这样的平台,因为在Kubernetes上启动容器很简单。
如果你觉得jenkins太复杂可以尝试以下使用drone替代,drone所有构建步骤都是以docker镜像提供的插件完成的,官方和社区都提供了很多高质量的插件(类似钉钉消息、微信消息、aws支持等),如果业务太复杂也可以自行开发插件或使用一个基础镜像通过脚本完成构建。
使用过程中如发现bug可以到社区寻求帮助
二、drone+gitee
drone从v2.7.2
版本开始支持gitee
1. 创建oauth2应用
右上角头像->设置->第三方应用->创建应用
配置如下图,应用主页填你准备部署drone的服务器域名或ip,应用回调地址在drone访问链接后跟/login
,权限至少选择projects
、pull_requests
、notes
、hook
2. 生成rpc密钥
drone server和drone runner通信的密钥,可以使用openssl
生成,这个密钥后面部署drone server
和drone runner
都需要使用
$ openssl rand -hex 16
bea26a2221fd8090ea38720fc445eca6
3. 部署drone
直接使用docker-compose
部署,按配置说明修改对应配置
简单的docker-compose.yml
version: '3'
services:
server:
image: drone/drone
ports:
- 80:80
- 443:443
volumes:
- /opt/drone/data:/data:rw
networks:
- drone
restart: always
environment:
# 你的服务器域名或ip
- DRONE_SERVER_HOST=your.company.com
# 使用的协议http或者https
- DRONE_SERVER_PROTO=http
# runner通信密钥,后面runner也要配置相同的值
- DRONE_RPC_SECRET=d7daxxxxxxxxxxxx1a8b
# gitee第三方应用client id
- DRONE_GITEE_CLIENT_ID=dba7xxxxxxxxxxxx4eb9
# gitee第三方应用client secret
- DRONE_GITEE_CLIENT_SECRET=ea5exxxxxxxxxxxx748d
# 默认创建账户,设置你的gitee用户名,这样你登录后是作为管理员
- DRONE_USER_CREATE=username:your_gitee_username,admin:true
runner:
image: drone/drone-runner-docker
restart: always
ports:
- 3000:3000
networks:
- drone
depends_on:
- server
volumes:
# 挂载宿主机的docker sock,runner实际还是使用的宿主机的docker daemon
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
# 与drone server通信的协议http/https
- DRONE_RPC_PROTO=http
# drone server服务器
- DRONE_RPC_HOST=your.company.com
# drone server rpc密钥
- DRONE_RPC_SECRET=d7daxxxxxxxxxxxx1a8b
# runner name,标识runner
- DRONE_RUNNER_NAME=runner
# runner最多同时执行任务数
- DRONE_RUNNER_CAPACITY=2
# runner使用协议http/https
- DRONE_HTTP_PROTO=http
# runner的host,server向runner主动推送任务时使用此配置,如果在不同服务器此处应该设置为runner的域名或ip,此处是同一服务器,所以使用docker service name是可以直接访问的
- DRONE_HTTP_HOST=runner
networks:
drone:
更为详细的docker-compose.yml
version: '3'
services:
server:
image: drone/drone
ports:
- 80:80
- 443:443
volumes:
- /opt/drone/data:/data:rw
networks:
- drone
restart: always
environment:
# 你的服务器域名或ip
- DRONE_SERVER_HOST=your.company.com
# 使用的协议http或者https
- DRONE_SERVER_PROTO=https
# 使用https时你的ssl证书路径
- DRONE_TLS_CERT=/data/your.company.com.pem
# 使用https时你的ssl证书密钥路径
- DRONE_TLS_KEY=/data/your.company.com.key
# runner通信密钥,后面runner也要配置相同的值
- DRONE_RPC_SECRET=d7daxxxxxxxxxxxx1a8b
# gitee第三方应用client id
- DRONE_GITEE_CLIENT_ID=dba7xxxxxxxxxxxx4eb9
# gitee第三方应用client secret
- DRONE_GITEE_CLIENT_SECRET=ea5exxxxxxxxxxxx748d
# 默认创建账户,设置你的gitee用户名,这样你登录后是作为管理员
- DRONE_USER_CREATE=username:your_gitee_username,admin:true
# drone各日志功能
- DRONE_LOGS_DEBUG=true
- DRONE_LOGS_TRACE=true
- DRONE_LOGS_COLOR=true
- DRONE_LOGS_PRETTY=true
- DRONE_LOGS_TEXT=true
runner:
image: drone/drone-runner-docker
restart: always
ports:
- 3000:3000
networks:
- drone
depends_on:
- server
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
environment:
# 与drone server通信的协议http/https
- DRONE_RPC_PROTO=https
# drone server服务器
- DRONE_RPC_HOST=your.company.com
# drone server rpc密钥
- DRONE_RPC_SECRET=d7daxxxxxxxxxxxx1a8b
# runner name,标识runner
- DRONE_RUNNER_NAME=runner
# runner最多同时执行任务数
- DRONE_RUNNER_CAPACITY=2
# runner使用协议http/https
- DRONE_HTTP_PROTO=http
# runner的host,server向runner主动推送任务时使用此配置,如果在不同服务器此处应该设置为runner的域名或ip,此处是同一服务器,所以使用docker service name是可以直接访问的
- DRONE_HTTP_HOST=runner
# 是否开启runner ui
- DRONE_UI_DISABLE=true
# 访问runner ui时的登录用户名
- DRONE_UI_USERNAME=runner_admin_username
# 访问runner ui时的登录密码
- DRONE_UI_PASSWORD=runner_admin_password
networks:
drone:
三、gitee插件
由于gitee没有提供类似github/gitlab那样status的api,所以在pr中调整到CI平台基本只能靠评论。可以使用这个插件kit101z/drone-plugin-gitee-pulls
实现在pr中更新build任务状态及快速访问的链接。
github status效果图:
kit101z/drone-plugin-gitee-pulls
仓库文档也提供了示例,以下为效果图:
镜像链接:https://hub.docker.com/r/kit101z/drone-plugin-gitee-pulls
源码仓库:https://github.com/kit101/drone-plugin-gitee-pulls
这个插件有个问题就是开始时会在clone步骤之后执行,clone时间比较长的时候,pr中的评论会延迟很久。
后续计划利用drone的webhook实现。