首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GitLab CI ssh注册表登录

GitLab CI ssh注册表登录
EN

Stack Overflow用户
提问于 2016-12-21 16:45:43
回答 3查看 3.8K关注 0票数 3

我有一个GitLab项目gitlab.com/my-group/my-project,它有一个CI管道,用于构建图像并将其推送到项目的GitLab注册表registry.gitlab.com/my-group/my-project:tag。我想将这个映像部署到,在那里,我有一个正在运行的VM停靠程序。

通过ssh‘’ing到VM,然后是docker login registry.gitlab.comdocker run ... registry.gitlab.com/my-group/my-project:tag,就可以很容易地手动完成它。除了docker login命令是交互式的,这对于CI来说是不可接受的。它可以在命令行上接受用户名和密码,但是即使我的登录信息在秘密变量中(将GitLab登录凭据存储在GitLab秘密变量中?),这也不是正确的做法。

这是管道部署阶段的预期工作流:

  1. 要么安装gcloud工具,要么使用预装的映像
  2. gcloud compute ssh my-gce-vm-name --quiet --command \ "docker login registry.gitlab.com && docker run registry.gitlab.com/my-group/my-project:tag"

由于gcloud命令将在GitLab CI运行程序中运行,它可以访问秘密变量,但这真的是从GitLab通过ssh登录到GitLab注册表的最佳方式吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-21 20:11:37

我会回答我自己的问题,以防其他人发现它。GitLab为管道的每个构建创建短暂的访问令牌。,它允许用户gitlab-ci-token访问GitLab注册表。解决方案是以构建中的gitlab-ci-token用户身份登录。

..gitlab ci.yml(节选):

代码语言:javascript
复制
deploy:
  stage: deploy
  before_script:
    - gcloud compute ssh my-instance-name --command "docker login registry.gitlab.com/my-group/my-project -u gitlab-ci-token -p $CI_BUILD_TOKEN"
票数 2
EN

Stack Overflow用户

发布于 2016-12-21 20:09:11

docker login命令创建一个本地配置文件,其中您的凭据存储在$HOME/.docker/config.json中,如下所示(请参阅此文件中的文献资料 ):

代码语言:javascript
复制
{
    "auths": {
        "<registry-url>": {
            "auth": "<credentials>"
        }
    }
}

只要主机上存在config.json文件,并且凭据(在本例中只是存储为base64("<username>:<password>"))不发生更改,就不需要在每个构建上运行docker login,也不需要将凭据存储为CI作业的变量。

我的建议是确保目标计算机上存在config.json文件(手动运行docker login一次,或者使用任何您喜欢的配置管理工具部署该文件)。这将避免您在构建管道中处理登录和管理凭据。

关于SSH登录本身,这应该工作得很好。如果您真的希望消除SSH登录,可以在目标计算机上设置Docker引擎,以侦听外部套接字,使用正式文件中描述的TLS客户端证书配置身份验证和加密,并在构建作业中直接与远程服务器的Docker对话:

代码语言:javascript
复制
variables:
  DOCKER_HOST: "tcp://<target-server>:2376"
  DOCKER_TLS_VERIFY: "1"
script:
  - docker run registry.gitlab.com/my-group/my-project:tag
票数 1
EN

Stack Overflow用户

发布于 2016-12-21 16:56:21

我们对其他主机提供商也有同样的“问题”。我们的解决方案是使用某种自定义脚本,它运行在目标机器上,可以通过Rest-Api端点(由Basic或其他任何方式保护)调用。

因此,您可以只触发远程主机进行对接登录和升级服务,而无需通过gitlab-ci授予SSH访问权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41267827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档