繁体   English   中英

GitLab CI 从私有注册表中提取 docker

[英]GitLab CI pull docker from private registry

情况

我目前正在开展一个项目,我将 CI 环境从 Jenkins 迁移到 GitLab CI。 为了让一切正常工作,我构建了一些 docker 容器,它们应该用作 CI 管道的基础镜像。 这些容器不能存储在 GitLab 内部容器注册表中,应该推送到 Artifactory 实例。

我已经做过/尝试过的事情

到目前为止,我通过将 Kaniko 用于 Docker 构建来完成所有工作,并将生成的图像正确推送到工件注册表 - 到目前为止,一切都很好。

然而,我现在已经到了这样的地步,我有 CI-Jobs 应该使用以前构建的容器映像作为它们的基本映像,因此应该从作为私有注册表的工件实例中提取它们。

示例配置

.docker-build-abstract:
  image: custom.kaniko.fork.from.internal.gitlab-registry:<tag>
  script:
    - |>
      echo "build container with image tag: ${IMAGE_TAG}"
      # kaniko default build..

# This job builds an image that is pushed to private registry.
docker-build-1:
  stage: "build"
  variables:
    IMAGE_TAG: some.nice.tag
    BUILD_ARGS: --build-arg foo=bar --build-arg bar=baz
  extends:
    - .docker-build-abstract

# This job should make use of the previously built image
other-job-1:
  stage: "build"
  image: docker.from.docker-build-1:<tag>
  script: #...

问题是我无法在官方文档中提出的 CI-Settings 中使用DOCKER_AUTH_CONFIG变量。 这是因为(我的理解)在项目设置中提供此变量时,这将覆盖默认的注册表设置( CI_REGISTRYCI_REGISTRY_USERCI_REGISTRY_PASSWORD ),但我需要保留这些内部变量背后的值,因为一些第一个作业使用仅在此私有 gitlab 实例中存在的容器映像。

是否可以在 CI/CD 变量设置中提供多个身份验证配置? 我将如何在这里引用预定义的变量,因为这对于保持内部注册表已知很重要?

我想像下面这样(这是 kaniko 预配置的一部分),但无法为这种情况提出可能的解决方案。

{
  "auths": {
    "$PRIVATE_REGISTRY": {
      "username": "$PRIV_REGISTRY_USER",
      "password": "$PRIV_REGISTRY_API_KEY",
      "email": "$PRIV_REGISTRY_USER_EMAIL"
    },
    "$CI_REGISTRY": {
      "username": "$CI_REGISTRY_USER",
      "password": "$CI_REGISTRY_PASSWORD"
    }
  }
}

据我了解,变量可以在 ci 配置中被覆盖,但这对我不起作用。 这是否需要对 ci-runner 进行高级配置才能实现所需行为,如文档中所述?

非常感谢您的帮助或提示!

实际上,您可以在上面的“身份验证”部分中配置多个凭据。 这对我们来说确实很好。 但我认为它不会通过在 CI 管道中设置 DOCKER_AUTH_CONFIG 来工作。 我想我们试过一次,但没有奏效。 我们通过设置环境变量在 Runner 配置中进行配置。

如果您不能这样做,另一种解决方案是在 CI 管道中运行 docker 登录命令,例如在 before_script 部分中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM