drone是一个golang编写的轻量级持续集成平台,它是原生Docker,所有的进程都在容器内进行。这使得Drone非常适合像Kubernetes这样的平台,因为在Kubernetes上启动容器很简单。
如果你觉得jenkins太复杂可以尝试以下使用drone替代,drone所有构建步骤都是以docker镜像提供的插件完成的,官方和社区都提供了很多高质量的插件(类似钉钉消息、微信消息、aws支持等),如果业务太复杂也可以自行开发插件或使用一个基础镜像通过脚本完成构建。
使用过程中如发现bug可以到社区寻求帮助
官方及社区收录的插件库
drone github仓库
drone社区
drone从v2.7.2
版本开始支持gitee
官方文档
右上角头像->设置->第三方应用->创建应用
配置如下图,应用主页填你准备部署drone的服务器域名或ip,应用回调地址在drone访问链接后跟/login
,权限至少选择projects
、pull_requests
、notes
、hook
drone server和drone runner通信的密钥,可以使用openssl
生成,这个密钥后面部署drone server
和drone runner
都需要使用
$ openssl rand -hex 16 bea26a2221fd8090ea38720fc445eca6
直接使用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没有提供类似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实现。