GitLab CI/CD页面列出许多已不存在的GitLab Runners

45次阅读
没有评论

问题描述

在使用GitLab Runner时,通过Helm chart在Kubernetes中运行,遇到一个问题:在运行大约两个月后,他在控制GitLab Runner的GitLab组的“CI / CD设置|Runners”页面上看到了以下消息:

“可用的组Runner:54″。

尽管这里只列出了部分,但页面上显示的是前几个Runner的信息,用户已经使用uniq -c命令统计过了。然而,在他的GitLab Runner Kubernetes容器中,却只有一个Runner。

另一个可能重要的信息是,托管GitLab Runner容器的Kubernetes节点是可抢占的,这意味着它每隔约24小时就会被关闭并重新启动。

用户想知道如何让GitLab相信这些旧的Runner不再存在,并且如何避免将来出现这个问题。

解决方案

请注意以下操作可能存在版本差异或风险,操作前做好备份。

解决方案1:注销离线的Runner

根据GitLab Runner命令手册,可以执行以下命令来删除旧的、已从GitLab中移除的Runner:

gitlab-runner verify --delete

这个命令将会清理掉不再存在的Runner。

解决方案2:API注销”僵尸”Runner

有时候,你可能需要使用GitLab API来注销”僵尸”Runner,这些Runner状态为”offline”。以下是一个通过API来注销这些”僵尸”Runner的示例:

curl -S --header "PRIVATE-TOKEN:<token>" "https://gitlab.example.com/api/v4/runners/all" | jq '.[] | select(.status == "offline") | .id' | xargs -I runner_id curl -S --request DELETE --header "PRIVATE-TOKEN:<token>" "https://gitlab.example.com/api/v4/runners/runner_id"

这个命令会列出所有Runner,然后通过API将状态为”offline”的Runner注销。

请注意,GitLab本身不直接管理Runner的状态,所以要重新启动或关闭Runner,需要在Runner所在的主机上使用适当的命令。

解决方案3:自定义脚本或工具

一些问题类似的用户已经创造了一些自定义的解决方案,包括使用Bash脚本、API调用以及其他脚本语言。你可以在GitLab的相关讨论中找到这些方法。

在实施自定义解决方案之前,请确保你对API的操作有所了解,以免误操作影响其他方面。

总结

解决这个问题的方法有多种,你可以根据自己的需求选择其中之一。注销离线的Runner或使用API来处理”僵尸”Runner都是常见的方法。此外,可以参考其他用户的自定义解决方案,但在使用这些方法之前,请确保你对相应操作有足够的了解,以避免可能的问题。在处理Runner时,要特别注意GitLab本身并不直接管理Runner的状态,因此要根据实际情况在Runner主机上执行相应操作。

正文完