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
使用以下格式的适当身份验证信息设置 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)
现在有可能,几个月前他们已经包含了这个选项.
使用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中,可以选择将注册表凭据添加为变量,因此您只需登录一次即可获取编码凭据.见文档.
不,这目前无法以任何优雅的方式实现。GitLab 应该为基础图像实现显式凭据,这将是最直接和正确的解决方案。
你需要docker login
在 GitLab Runner 机器上。您不能使用 ,gitlab-ci-token
因为它们过期并且依赖于项目,因此您实际上不能为每个项目使用一个令牌。使用您自己的登录名几乎是目前唯一可用的解决方案(很高兴在此问题上得到纠正)。
归档时间: |
|
查看次数: |
6460 次 |
最近记录: |