0

这个类似的问题不适用,因为我没有使用 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.0Kaniko 图像时得到了解决。同样,我将图像名称行更改为,name: gcr.io/kaniko-project/executor:debug-v0.16.0但这导致了相同的错误消息。

最后,我尝试使用此处所示的部署密钥创建一个通用用户来访问注册表。通过 GitLabCI 环境变量项目设置界面,我添加了用户名和密钥对应的两个变量,并在我的流水线脚本中替换了这些变量。这导致了相同的错误消息。

我尝试了这种方法的几种变体,包括将这些自定义变量重命名为“CI_REGISTRY_USER”和“CI_REGISTRY_PASSWORD”(预定义变量)。我还确保这些变量都没有被标记为“受保护”。这些都没有解决问题。

我还尝试逐字运行教程脚本(没有自定义图像标签),这也会导致相同的错误消息。

有没有人最近在使用 Kaniko 在他们的 GitLabCI 管道中构建 Docker 映像方面取得了任何成功?似乎其他人也遇到了类似的问题,但据我所知,没有提出任何解决方案,我不确定这个问题是否已经结束。请让我知道是否有任何其他信息有助于诊断潜在的问题来源。谢谢大家!

4

1 回答 1

0

嘿,我得到了它的工作,但发现起来很麻烦。

我必须使用的凭据是我的 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
于 2020-08-30T10:45:47.640 回答