GitLabCI Kaniko 关于共享运行程序“检查推送权限时出错 - 确保您输入了正确的标签名称”

问题描述 投票:0回答:3

这个类似的问题不适用,因为我没有使用 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 镜像方面取得过成功? 似乎其他人也遇到类似的问题,但据我所知,尚未提出解决方案,我不确定问题是否出在我身上。如果有任何其他信息有助于诊断潜在问题来源,请告诉我。谢谢大家!

docker gitlab gitlab-ci docker-registry kaniko
3个回答
0
投票

我之前多次遇到这个问题,忘记变量被设置为

protected
,因此只会导出到
protected
分支。


0
投票

我的 gitlab-ci 管道也遇到了这个问题。我想使用我帐户的访问令牌直接推送到公共 docker-hub 存储库。

对于我来说,最终的问题是我使用了错误的注册表地址。我必须插入 https://index.docker.io/v1/,而不是 docker.io(被 kaniko 更改为 https://index.docker.io/v2)。之后,即使使用受保护的 ci 变量,容器的构建也没有任何问题


-1
投票

嘿,我已经成功了,但要找出来却很麻烦。

我必须使用的凭据是我的 git 用户名和密码,而不是注册表用户/密码!

这是我的 gitlab-ci.yml 的样子(当然你需要用变量替换所有内容,但直到现在我都懒得这样做)

 build:
  stage: build
  image: 
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  tags:
    - k8s
  script:
    - echo "{\"auths\":{\"registry.mydomain.de/myusername/mytag\":{\"username\":\"myGitusername\",\"password\":\"myGitpassword\"}}}" > /kaniko/.docker/config.json
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination registry.mydoamin.de/myusername/mytag:$CI_COMMIT_SHORT_SHA
© www.soinside.com 2019 - 2024. All rights reserved.