这个类似的问题不适用,因为我没有使用 Kubernetes 或我自己注册的跑步者。
我正在尝试在我的 GitLabCI 管道中构建一个基于 Ruby 的图像,以便预先安装我的 gem 以供后续管道阶段使用。为了构建这个图像,我试图在 .pre 阶段运行的作业中使用 Kaniko。
build_custom_dockerfile:
stage: .pre
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
variables:
IMAGE_TAG: ${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}
script:
- echo "{\"auths\":{\"${CI_REGISTRY}\":{\"username\":\"${CI_REGISTRY_USER}\",\"password\":\"${CI_REGISTRY_PASSWORD}\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context ${CI_PROJECT_DIR} --dockerfile ${CI_PROJECT_DIR}/dockerfiles/custom/Dockerfile --destination \
${CI_REGISTRY_IMAGE}:${IMAGE_TAG}
这当然是基于官方的 GitLabCI Kaniko 文档。
但是,当我运行管道时,此作业会返回错误并显示以下消息:
error checking push permissions -- make sure you entered the correct tag name, and that you are authenticated correctly, and try again: getting tag for destination: registries must be valid RFC 3986 URI authorities: registry.gitlab.com
Dockerfile 路径是正确的,并且通过对 --dockerfile 参数的无效 Dockerfile 路径进行测试,我很清楚这不是问题的根源。
据我所知,我正在使用正确的管道环境变量进行身份验证,并按照文档逐字使用 Kaniko。我正在使用 GitLab 的共享运行器运行我的管道作业。
根据5 月的这个问题评论,其他人遇到了类似的问题,然后在恢复到debug-v0.16.0
Kaniko 图像时得到了解决。同样,我将图像名称行更改为,name: gcr.io/kaniko-project/executor:debug-v0.16.0
但这导致了相同的错误消息。
最后,我尝试使用此处所示的部署密钥创建一个通用用户来访问注册表。通过 GitLabCI 环境变量项目设置界面,我添加了用户名和密钥对应的两个变量,并在我的流水线脚本中替换了这些变量。这导致了相同的错误消息。
我尝试了这种方法的几种变体,包括将这些自定义变量重命名为“CI_REGISTRY_USER”和“CI_REGISTRY_PASSWORD”(预定义变量)。我还确保这些变量都没有被标记为“受保护”。这些都没有解决问题。
我还尝试逐字运行教程脚本(没有自定义图像标签),这也会导致相同的错误消息。
有没有人最近在使用 Kaniko 在他们的 GitLabCI 管道中构建 Docker 映像方面取得了任何成功?似乎其他人也遇到了类似的问题,但据我所知,没有提出任何解决方案,我不确定这个问题是否已经结束。请让我知道是否有任何其他信息有助于诊断潜在的问题来源。谢谢大家!