docker - GitLab CI ssh 注册表登录

标签 docker gitlab gitlab-ci docker-registry gitlab-ci-runner

我有一个 GitLab 项目 gitlab.com/my-group/my-project它有一个 CI 管道,可以构建图像并将其推送到项目的 GitLab 注册表 registry.gitlab.com/my-group/my-project:tag 。我想将此镜像部署到 Google Compute Engine,其中我有一个运行 docker 的虚拟机。

通过 ssh 进入虚拟机即可轻松手动完成此操作,然后 docker login registry.gitlab.comdocker run ... registry.gitlab.com/my-group/my-project:tag 。除了docker login命令是交互式的,这对于 CI 来说是不行的。它可以在命令行上接受用户名和密码,但这似乎不是正确的做法,即使我的登录信息位于 secret variable 中。 (将我的 GitLab 登录凭据存储在 GitLab secret 变量中?...)

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

  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 Runner 中运行,它可以访问 secret 变量,但这确实是通过 ssh 从 GitLab 登录 GitLab 注册表的最佳方式

最佳答案

我会回答我自己的问题,以防其他人偶然发现它。 GitLab creates ephemeral access tokens for each build of the pipeline授予用户 gitlab-ci-token 访问 GitLab 注册表的权限。解决方案是在构建中以 gitlab-ci-token 用户身份登录。

.gitlab-ci.yml(摘录):

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"

关于docker - GitLab CI ssh 注册表登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41267827/

相关文章:

python - Docker Python 库无法正确登录 AWS ECR

docker - 使用 ansible 的 helm 扩展覆盖 values.yml

hadoop - Mapreduce 作业 ipc.Client 重试连接

python - gitlab-ci.yml : 'script: -pytest' command is not recognized

docker - 如何在gitlab ci上部署quasar-vue应用程序

spring - Dockerfile 无法构建 jar 文件 : Main class name has not been configured

gitlab - Gitlab 可以自动删除过时的分支吗?

gitlab - Cypress/GitLab CI/CD 集成 - Cypress 不会以 headless 模式启动

gitlab 运行器捕获错误 : no matching files

selenium - Openshift-gitlab-cli-phantomjs-WebDriverException : Timed out waiting for driver server to start