Closed shynome closed 1 year ago
先列下 drone.io 的优点, 免得你们看到这些坑就放弃了它
drone.io
git ci
docker
drone-plugins
一开始按照官方教程设置, 把 drone server 和 drone agent 这两个服务跑了起来, 但总是在半个小时左右的时候失去连接, 找来找去最后在社区找到了解决方案, 好像是因为 docker stack 的负载均衡代理缘故(也可能不是, 我也是个小白, 对此不是很明白), 添加一个选项就行了, 如下.
drone server
drone agent
# docker stack compose 的 版本得升到 3.2 才能使用 { service: { deploy: endpoint_mode: dnsrr } } 选项 version: '3.2' services: # gogs ci drone_server: image: drone/drone:0.8.5 deploy: replicas: 1 + endpoint_mode: dnsrr resources: limits: memory: 50M depends_on: - gogs environment: - DRONE_DATABASE_DRIVER=mysql - 'DRONE_DATABASE_DATASOURCE=root:root@tcp(mysql:3306)/drone?parseTime=true' - DRONE_OPEN=true - DRONE_HOST=http://drone_server:9000 - DRONE_GOGS=true - DRONE_GOGS_URL=http://gogs.hostname.com # 如果 gogs 是需要登录才能查看的, 那么就需要开启 PRIVATE_MODE, 这就是第二个坑的解决方案 + - DRONE_GOGS_PRIVATE_MODE=true - DRONE_SECRET=drone - DRONE_ADMIN=shynome # gogs ci worker drone_agent: image: drone/agent:0.8.5 deploy: replicas: 1 + endpoint_mode: dnsrr resources: limits: memory: 50M command: agent depends_on: - drone_server volumes: - /var/run/docker.sock:/var/run/docker.sock:rw environment: - DRONE_SERVER=drone_server:9000 - DRONE_SECRET=drone
第二个坑不知道是 drone.io 还是 gogs 的坑, 重现步骤
gogs
.drone.yml
fatal: could not read Username for 'https://gogs.self.fevercomm.com': No such device or address
看起来是 gogs 没有管全局设置, 把公开库视为全网都可以访问的, 从而没有传 username 和 token 给 drone.io , 导致 clone 失败
username
token
临时的解决方案
webhooks
新坑
# 结尾不能带 / , http://gogs.hostname.com/ 这样的的话会授权失败 DRONE_GOGS_URL: http://gogs.hostname.com
直接使用gitea ci/cd
评价先行
先列下
drone.io
的优点, 免得你们看到这些坑就放弃了它git ci
docker
设置部署脚本的运行环境, 带来了高度的可定制化, 配合预先设定好的环境变量甚至可以做到一个镜像完成部署, 就是drone-plugins
第一个坑
一开始按照官方教程设置, 把
drone server
和drone agent
这两个服务跑了起来, 但总是在半个小时左右的时候失去连接, 找来找去最后在社区找到了解决方案, 好像是因为 docker stack 的负载均衡代理缘故(也可能不是, 我也是个小白, 对此不是很明白), 添加一个选项就行了, 如下.第二个坑
第二个坑不知道是
drone.io
还是gogs
的坑, 重现步骤gogs
里全局设置只有登录才能访问仓库.drone.yml
fatal: could not read Username for 'https://gogs.self.fevercomm.com': No such device or address
看起来是
gogs
没有管全局设置, 把公开库视为全网都可以访问的, 从而没有传username
和token
给drone.io
, 导致 clone 失败临时的解决方案
drone.io
对应该仓库的开关webhooks
drone.io
对应该仓库的开关drone.io
能否 clone