Gitea+Drone+Docker自动化部署项目中遇到的问题


经验分享1039 阅2 评

只部署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。

最后更新 2022-02-09
评论 ( 2 )
OωO
隐私评论
  1. 这个是在gitea上实现持续集成嘛?可以实现类似GitHub action的效果吗?

    2年前湖南省长沙市回复
    1. @Fox

      这个相当于自己部署一个类似Github Action的开源软件。自定义比较高一点,支持github、gitee、gitea、gitlab、Gogs这些主流的git仓库。相对于Jenkins会简单容易一些,只需要一个配置文件就可以完成所有的事情。

      2年前福建省厦门市回复