GitLab中从project1流水线推送镜像至project2容器仓库遇权限拒绝
GitLab跨项目推送镜像权限问题解决
这个操作完全可行,报错"denied: requested access to the resource is denied"的核心原因是权限配置不到位:
默认的CI_REGISTRY_USER和CI_REGISTRY_PASSWORD是project1流水线的内置凭据,仅能访问project1自身的容器仓库,没有权限操作project2的仓库资源。
解决步骤如下:
在project2创建访问令牌
优先用项目级访问令牌(比个人令牌更安全):进入project2的「设置」→「访问令牌」,创建一个令牌,勾选read_registry和write_registry权限,保存生成的用户名和令牌值(令牌只显示一次,务必记好)。在project1添加CI/CD变量
进入project1的「设置」→「CI/CD」→「变量」,添加两个变量:PROJECT2_REGISTRY_USER:填入project2访问令牌的用户名PROJECT2_REGISTRY_PASSWORD:填入刚才生成的令牌值,勾选「掩码」防止泄露。
修改project1的.gitlab-ci.yml脚本
把登录命令替换成用project2的凭据登录,修改后的脚本部分如下:script: - docker login -u "$PROJECT2_REGISTRY_USER" -p "$PROJECT2_REGISTRY_PASSWORD" gitlab.com:5050 - docker build -t gitlab.com:5050/groupname/project2/pythonapp . - docker push gitlab.com:5050/groupname/project2/pythonapp额外检查项
- 确认project2的容器仓库没有设置严格的访问限制,允许该令牌对应的账户访问
- 核对镜像标签中的groupname、project2名称是否拼写正确
内容的提问来源于stack exchange,提问作者sandesh b nataraj
相关产品推荐
相关产品推荐

