只部署Drone是不够的
Drone目前分为Server+Runner,至于网上教程中的Bridge我目前还没用到,不知道是之前的产物还是仅仅我用不到。
一般来说,是Docker或者KUBERNETES自动化部署,用到什么部署什么Runner。两者不能混用。
Drone自动化部署触发失败
一开始以为是配置文件编写问题,后来看了gitea的log,发现和drone服务器的通信失败了(很奇怪,Drone可以正常获取Gitea中的仓库信息,但是Gitea钩子触发Drone的接口失败了,目前还没找到问题)。因为Gitea是一年前部署的,所以我尝试了升级版本(中间一个大插曲,升级之后的gitea不能使用root用户启动了)。之后还是报错,一气之下,我部署了个新的Gitea服务器,和Drone所在服务器一样,就没出现问题了。
两者发行时间尽量相近(用最新的),服务器放在一起(这个不知道是什么问题,我是这么解决的)
小插曲 -> 内存占用问题
gitea刚部署内存占用会很多,执行一下动作。然后我当时因为Drone通信失败问题,所以又部署了一套,导致内存直接被挤爆了。所以下次部署或者测试的时候一定要算好耗费的内存。防止服务器不正常宕机。因为我都是总是启动docker镜像,导致服务器每次重启就会被立马假死(可以正常开关机,不能执行任何操作,包括ssh连接),所以我最后只能重装了。
指定Runner时所用的标签
在重装完系统后重新部署的drone-runner-docker中,我做笔记的DRONE_RUNNER_LABELS标签也给写了进去,结果测了十几次都卡着,最后删了这个才正常运作。估计是我对DRONE_RUNNER_LABELS这个的理解错了。所以文档一定要看清楚,在行动。
关于 appleboy/drone-ssh 中的脚本
drone支持docker与ssh管道,但是如果都要用就需要部署两个,于是就有大佬做了插件,使ssh可以在docker中跑。因为我是ubuntu系统,所以我都是sudo -i再进行操作。但是放在脚本中,却出了问题。
err: [180014] Failed to execute script docker-compose
err: Traceback (most recent call last):
err: File "urllib3/connectionpool.py", line 677, in urlopen
err: File "urllib3/connectionpool.py", line 392, in _make_request
err: File "http/client.py", line 1277, in request
err: File "http/client.py", line 1323, in _send_request
err: File "http/client.py", line 1272, in endheaders
err: File "http/client.py", line 1032, in _send_output
err: File "http/client.py", line 972, in send
err: File "docker/transport/unixconn.py", line 43, in connect
err: PermissionError: [Errno 13] Permission denied
err:
err: During handling of the above exception, another exception occurred:
err:
err: Traceback (most recent call last):
err: File "requests/adapters.py", line 449, in send
err: File "urllib3/connectionpool.py", line 727, in urlopen
err: File "urllib3/util/retry.py", line 410, in increment
sudo -i在脚本中不生效,但是日志却报了docker-compose命令不支持,这误导了我很长时间。最后需要在每句需要root权限的语句前面添加sudo即可
Golang打包docker问题
莫名其妙的报错standard_init_linux.go:228: exec user process caused: no such file or directory
刚开始我以为是Dockerfile问题,检查了几遍发现,并没有什么不对的地方。百度过后,发现是启动脚本字符集有问题。但是我不是shell脚本,理论上不应该出现问题的。
在找了很多资料之后,发现我编译的镜像和打包的镜像不是同一个,也可能出问题。最后换了之后,发现正常了。
最终我的Hello, World!
终于跑起来了
最后说两句
文档很重要,一定在在看完文档,搞清文档之后再去行动,可以解决绝大部分问题。
Google确实不错,很多问题百度根本找不到,很多问题还都是重复的。解决问题,还是得上Google。
这个是在gitea上实现持续集成嘛?可以实现类似GitHub action的效果吗?
这个相当于自己部署一个类似Github Action的开源软件。自定义比较高一点,支持github、gitee、gitea、gitlab、Gogs这些主流的git仓库。相对于Jenkins会简单容易一些,只需要一个配置文件就可以完成所有的事情。