docker - 如何在构建 Docker 映像之前对 GitLab 的容器注册表进行身份验证?
问题描述
我有一个私人 GitLab 项目,其中包含用于构建和推送 Docker 映像的管道。因此,我必须首先对 GitLab 的 Docker 注册表进行身份验证。
研究
我阅读了 Authenticating to the Container Registry with GitLab CI/CD:
通过 GitLab CI/CD 向 Container Registry 进行身份验证的方式有三种,具体取决于项目的可见性。
适用于所有项目,但更适合公共项目:
使用特殊
CI_REGISTRY_USER
变量:为您创建此变量指定的用户,以便推送到连接到您的项目的注册表。其密码由CI_REGISTRY_PASSWORD
变量自动设置。这使您可以自动构建和部署 Docker 映像,并具有对注册表的读/写访问权限。这是短暂的,因此仅对一项工作有效。您可以按原样使用以下示例:docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
对于私人和内部项目:
使用个人访问令牌:如果您的项目是私有的,您可以创建和使用个人访问令牌:
- 对于读取(拉取)访问,范围应该是
read_registry
.- 对于读/写(拉/推)访问,使用
api
.替换以下示例中的
<username>
and :<access_token>
docker login -u <username> -p <access_token> $CI_REGISTRY
使用 GitLab 部署令牌:您可以为您的私人项目创建和使用特殊的部署令牌。它提供对注册表的只读(拉取)访问。创建后,您可以使用特殊的环境变量,GitLab CI/CD 将为您填写它们。您可以按原样使用以下示例:
docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
和容器注册表:
通过更新权限模型,我们还扩展了对私有项目访问容器注册表的支持。
版本历史
您的作业可以访问您通常可以访问的所有容器映像。唯一的含义是您可以推送到触发作业的项目的容器注册表。
示例用法如下所示:
test: script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - docker pull $CI_REGISTRY/group/other-project:latest - docker run $CI_REGISTRY/group/other-project:latest
我尝试了第一种和第四种方式,我可以进行身份验证。
问题
优缺点都有什么?我猜第三种方式仅用于部署,而不用于构建和推送。第二种方式也可能如此。那正确吗?
为什么其他文档中没有列出第四种方式?这种方式被弃用了吗?
解决方案
我相信差异只是关于用户技能和权限。
任何人都可以做的第一种方式,因为变量会自动出现在正在运行的作业中。
其次,具有任何权限的任何人都可以创建个人访问令牌(但与创建访问令牌相比,有一个额外的步骤)。
第三,具有正确权限的人可以创建部署密钥。部署密钥不会像个人访问令牌那样授予对 API 的访问权限,并且只有在存储库中提取/读取数据的权限,它们不能写入/推送。
第四个选项,它允许您从注册表读取/拉取容器映像,但也允许您推送到注册表。如果您有一个在映像中构建应用程序的 CI 步骤,或者您正在生成容器映像并希望将其推送到注册表中的任何其他步骤,这将很有帮助(因此管道中的另一个步骤可以将其拉下并使用它)。我的猜测是此选项未与其他选项一起列出,因为它用于构建容器映像。不过,您可能可以像其他任何人一样使用它。
推荐阅读
- .net-core - .Net Core 的控制台应用程序清单图标未更新
- c# - C#如何将datagridview的当前行复制到单个数据行?
- json - 如何使用键和值输出正确的结果?
- react-native - 在现有的 react native 项目中使用 redux 以及它对项目的影响
- mysql - #1054 - 同一表 mysql 版本 5.6.4 的子查询中的“where 子句”中的未知列“ats2”
- haxe - 可以制作名为“Map”的自定义类,并且仍然引用 Haxe“Map”类吗?
- visual-studio-2017 - 如何防止 vc_redist.x##.exe (VS2017) 由于挂起的重新启动而出现模棱两可的失败?
- html - 输入类型号默认为 0,但如果它从 1 开始,则在提交时进行验证
- docker - docker-compose 运行现有容器
- asp.net-mvc - 在日期之间执行搜索时出现 ASP .NET MVC 错误