使用来自Gitlab Registry的私有Docker Image作为CI的基本映像

Mar*_*ski 11 gitlab gitlab-ci gitlab-ci-runner

如果我想使用Gitlab Registry中的图像作为另一个CI构建的基本映像,我该如何进行身份验证?

根据https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#using-a-private-docker-registry我首先要手动登录跑步机.不知何故,使用现有的Gitlab用户登录感觉很奇怪.

有没有办法使用CI变量"CI_BUILD_TOKEN"(它被描述为"用于通过GitLab容器注册表进行身份验证的令牌")进行身份验证以从Gitlab Registry中提取基本映像?

编辑:我发现我可以使用公共项目的图像.但我真的不想公开我的码头工程项目.

更新:从Gitlab 8.14开始,您只需使用docker注册表中构建的docker镜像.请参阅https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#support-for-gitlab-integrated-registry

hum*_*olf 21

上述所有答案(包括已接受的答案)均已弃用,这在 2021 年是可能的:

https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#access-an-image-from-a-private-container-registry


长话短说

使用以下格式的适当身份验证信息设置 CI/CD 变量DOCKER_AUTH_CONFIG值:

步骤1:

# The use of "-n" - prevents encoding a newline in the password.
echo -n "my_username:my_password" | base64

# Example output to copy
bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=
Run Code Online (Sandbox Code Playgroud)

步骤2(此JSON是要为变量设置的值DOCKER_AUTH_CONFIG):

{
    "auths": {
        "registry.example.com:5000": {
            "auth": "(Base64 content from above)"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


cha*_*rli 6

现在有可能,几个月前他们已经包含了这个选项.

使用gitlab-ci-token用户和变量$CI_BUILD_TOKEN作为密码.

此示例适用于GitLab 8.13.6.如果需要,它会构建测试图像,并在下一阶段使用它来执行语法检查:

build_test:
  stage: build_test_image
  script:
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:test -f dockerfiles/test/Dockerfile .
    - docker push $CI_REGISTRY_IMAGE:test
  tags:
    - docker_build
  environment: test

test_syntax:
  image: $CI_REGISTRY_IMAGE:test
  stage: test
  script:
    - flake8 --ignore=E501,E265,E402 .
Run Code Online (Sandbox Code Playgroud)

更新:重新阅读问题,接受的答案是正确的.在我的示例中,test_syntax除非用户从转轮计算机手动登录,否则作业将无法对注册表进行身份验证.虽然,如果两个跑步者在同一主机上,它可以工作,但它不是最好的解决方案.

gitlab-ci-multi-runner 1.8中,可以选择将注册表凭据添加为变量,因此您只需登录一次即可获取编码凭据.见文档.


Nik*_*nko 5

不,这目前无法以任何优雅的方式实现。GitLab 应该为基础图像实现显式凭据,这将是最直接和正确的解决方案。

你需要docker login在 GitLab Runner 机器上。您不能使用 ,gitlab-ci-token因为它们过期并且依赖于项目,因此您实际上不能为每个项目使用一个令牌。使用您自己的登录名几乎是目前唯一可用的解决方案(很高兴在此问题上得到纠正)。