You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab项目重命名后CI_REGISTRY_IMAGE仍用旧名致认证失败

GitLab项目重命名后CI_REGISTRY_IMAGE未更新导致Kaniko推送授权失败的解决方案

问题还原

项目从old_name重命名为new_name,并通过Settings->General->Advanced->Change Path修改了路径,容器仓库推送命令已显示新路径docker push registry.gitlab.com/path/to/project/new_name,但流水线中CI_REGISTRY_IMAGE变量仍返回旧路径registry.gitlab.com/path/to/project/old_name,执行Kaniko命令时触发以下未授权错误:

检查推送权限出错——请确认输入的标签名称正确,且已完成正确认证,然后重试:检查"registry.gitlab.com/path/to/project/old_name/main:some_git_hash"的推送权限时出错:POST https://registry.gitlab.com/v2/path/to/project/old_name/main/blobs/uploads/: 未授权:需要认证;[map[Action:pull Class: Name:path/to/project/old_name/main ProjectPath: Type:repository] map[Action:push Class: Name:path/to/project/old_name/main ProjectPath: Type:repository]]

流水线执行命令:

/kaniko/executor --context "${CI_PROJECT_DIR}" --build-arg "NODE_VERSION=18.15.0" --build-arg "NPM_TOKEN=${NPM_TOKEN}" --destination "${CI_REGISTRY_IMAGE}/$(basename ${CI_COMMIT_BRANCH}):$CI_COMMIT_SHA" --destination "${CI_REGISTRY_IMAGE}/$(basename ${CI_COMMIT_BRANCH}):latest"

核心原因

GitLab预定义变量CI_REGISTRY_IMAGE与项目路径强绑定,项目重命名或路径修改后,该变量不会实时自动同步更新,清理Runner缓存无法解决此问题,因为问题根源在GitLab项目元数据或CI变量配置层面。

解决步骤

  • 手动同步容器仓库配置
    进入项目Settings > Packages & Registries > Container Registry页面,确认仓库列表已更新为新路径。若旧路径仓库仍存在,删除旧仓库(确认无留存需求后操作),再重新触发流水线。

  • 自定义变量覆盖预定义值
    在项目Settings > CI/CD > Variables中添加自定义变量CI_REGISTRY_IMAGE,值设为新仓库路径registry.gitlab.com/path/to/project/new_name。自定义优先级高于GitLab预定义变量,可强制流水线使用新路径。

  • 确认项目路径修改生效
    回到Settings > General > Advanced页面,检查路径修改操作是否已完全生效,无待处理的路径变更请求。若有,重新提交修改并等待5-10分钟让GitLab完成元数据同步。

  • 重置自托管Runner(若使用)
    若用的是自托管Runner,停止Runner服务,删除其缓存目录(通常为/etc/gitlab-runner/cache),重新注册Runner后启动服务,清除Runner缓存的旧项目信息。

  • 临时硬编码路径验证
    直接修改Kaniko命令,用新路径替换CI_REGISTRY_IMAGE,快速验证推送是否正常:

    /kaniko/executor --context "${CI_PROJECT_DIR}" --build-arg "NODE_VERSION=18.15.0" --build-arg "NPM_TOKEN=${NPM_TOKEN}" --destination "registry.gitlab.com/path/to/project/new_name/$(basename ${CI_COMMIT_BRANCH}):$CI_COMMIT_SHA" --destination "registry.gitlab.com/path/to/project/new_name/$(basename ${CI_COMMIT_BRANCH}):latest"
    

验证方式

触发新流水线,查看日志中CI_REGISTRY_IMAGE的输出值是否为新路径,同时确认Kaniko推送镜像时不再出现UNAUTHORIZED错误。

内容的提问来源于stack exchange,提问作者LeoVen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:40:56