gitlab-ci - 推送构建的图像时,Gitlab-runner 有“访问被拒绝”
问题描述
我在将使用 gitlab-runner 构建的映像推送到 gitlab 存储库时遇到问题。
我的 gitlab-ci.yml:
image: docker:latest
services:
- docker:dind
stages:
- build
- release
variables:
TEST_IMAGE: registry.gitlab.com/myhost/haproxy:$CI_COMMIT_REF_NAME
RELEASE_IMAGE: registry.gitlab.com/myhost/haproxy:latest
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN gitlab.com
build:
stage: build
script:
- docker build --pull -t $TEST_IMAGE .
- docker push $TEST_IMAGE
release:
stage: release
script:
- docker pull $TEST_IMAGE
- docker tag $TEST_IMAGE $RELEASE_IMAGE
- docker push $RELEASE_IMAGE
only:
- master
docker login 有效——我得到了“登录成功”——但是当涉及到推送操作时,我得到:
$ docker push $TEST_IMAGE
The push refers to repository [registry.gitlab.com/myhost/haproxy]
d77ab2f42dd4: Preparing
c70258f465dd: Preparing
96b45c1aa07c: Preparing
28587e66f3e8: Preparing
21b59fc0e3a3: Preparing
9c46f426bcb7: Preparing
9c46f426bcb7: Waiting
denied: access forbidden
ERROR: Job failed: exit code 1
跑步者在我自己的服务器上,我正在推送到 gitlab.com
我还检查了我的本地机器,在脚本中执行终端命令 - 登录,构建和推送 - 一切正常,但如果我使用跑步者在本地运行,注册并获得工作,我也会获得禁止访问错误。
所以我认为问题出在跑步者身上,博什么。我比较了从 10.6 到最新 11.0 的几个 gitlab-runner 版本的行为
有任何想法吗?
解决方案
所以问题是错误的注册表地址 - 它应该是 registry.gitlab.com
它误导了我,即使没有“注册表”前缀,它也会在终端中显示“登录”,因此最好的解决方案是在 gitlab-ci.yml 登录期间使用内置变量:
docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
推荐阅读
- python - 如何在 matplotlib 中为多个图格式化 x 轴
- android-sdk-manager - 当我尝试执行任何命令时,Android SDK [控制台工具] 仅显示“使用”帮助信息
- c - 强制转换中 const 说明符的必要性
- php - 如何从 Laravel 项目中的 GraphQL 模式调用 Eloquent 动态范围(带 1 个参数)?
- python - 无法使用 pynput 打印大写字母或括号
- c# - API 入口点无法识别 JSON (TypeScript) 的元组数组
- sql - SQL Server 从自定义分隔文本创建行
- java - Spring @Sql 注释在 UTC 中插入 MySQL 时间戳
- azure-devops - Release.Environments.{Stage}.Status 始终为“InProgress”
- python - 从文件 Python 重新加载函数后,仍然使用旧版本