![](/img/trans.png)
[英]how to pull from a private registry in gitlab CI, with docker DIND
[英]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_REGISTRY
、 CI_REGISTRY_USER
、 CI_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.