我之前在 GitLab 上创建了一个 Docker 镜像,只包含一个 Dockerfile 和一个 .gitlab-ci.yml
文件,如下所示:
build_image:
image: docker:git
services:
- docker:dind
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
- docker build -t registry.gitlab.com/user149408/ci-image-server:$CI_COMMIT_REF_NAME .
- docker push registry.gitlab.com/user149408/ci-image-server:$CI_COMMIT_REF_NAME
这适用于我在 2020 年 5 月上旬创建的上一个项目。该项目的 Container Registry 向我展示了一个映像,此后我已成功将其用于各种 CI 作业。
现在我尝试创建一个新项目,同样只使用这两个文件。在 .gitlab-ci.yml
中,我刚刚更改了项目名称(两者的用户名相同)。
现在 CI/CD 管道在 docker push
处失败:
denied: requested access to the resource is denied
登录成功,构建完成。
在研究了 GitLab 文档后,我还尝试了其他身份验证选项,但每次都得到完全相同的行为:
docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
docker login -u $CI_JOB_USER -p $CI_JOB_TOKEN $CI_REGISTRY
这里有什么问题?在过去的 9 个月里,GitLab 是否改变了推送到其容器注册表的任何内容?我是否缺少一些项目设置?
答案 0 :(得分:0)
引用不存在的资源也将导致 requested access to the resource is denied
。 令人困惑,但在幕后的某处可能是合乎逻辑的(令牌仅对当前存储库有效,对其他人无效,或请求的资源不存在,因此没有任何权限)。
因此,如果您因为莫名其妙的原因收到此错误,请仔细检查名称以查找难以发现的拼写错误。
在这种情况下,GitLab 存储库被称为 ci-images-server
,而我试图改为推送到 ci-image-server
。