K8s/Docker部署GitLab流水线失败,报错清理configmap时资源名不能为空
GitLab CI流水线异常问题解析与解决方案
错误含义与触发原因
核心报错Error cleaning up configmap: resource name may not be empty指的是GitLab Runner的Kubernetes执行器在处理CI任务时,需要清理任务关联的临时ConfigMap资源,但内部拼接的待删除ConfigMap名称字段为空,触发了Kubernetes API的参数校验错误。
为空的资源名指向的是Runner为每个CI任务动态生成的、用于存储流水线执行脚本、环境变量等临时数据的ConfigMap对象名称。
触发该问题的核心原因是版本不兼容:你当前使用的GitLab Runner 14.3.2版本与GitLab EE 12.10.12版本适配存在缺陷,旧版本GitLab返回的任务元数据字段无法被高版本Runner正常解析,导致ConfigMap名称生成逻辑异常。你提到的权限不足报错属于衍生问题:因为ConfigMap名称生成异常,后续给ConfigMap设置ownerReferences的操作参数异常,进而触发权限类报错,与你当前的ServiceAccount、Role等RBAC配置无关。
修复方案
- 降级GitLab Runner到匹配GitLab 12.10版本的兼容版本,推荐使用13.8.x系列版本,该版本对GitLab 12.10的适配性最优,可解决版本兼容问题。
- 清理gitlab命名空间下所有残留的异常ConfigMap、未销毁的CI任务Pod,避免冗余资源干扰新Runner运行。
- 降级完成后重启GitLab Runner服务,验证流水线运行状态。
配置非latest标签Runner版本的方法
Docker部署的Runner修改方式
修改Runner的docker-compose配置文件或docker run命令中的镜像字段,将镜像标签从latest替换为指定版本号即可,示例:gitlab/gitlab-runner:v13.8.0,重启容器后生效。
Kubernetes部署的Runner修改方式
- 若使用原生YAML部署:修改Deployment配置中的
image字段的标签为目标版本号,执行kubectl apply -f <部署文件路径> -n gitlab完成更新。 - 若使用官方Helm Chart部署:修改values.yaml中的
image.tag字段为指定版本号,执行helm upgrade命令更新即可。
内容的提问来源于stack exchange,提问作者KrayzeeKev
相关产品推荐
相关产品推荐

