【问题标题】:How to pull a docker container on AWS EC2 instance via gitlab-ci?如何通过 gitlab-ci 在 AWS EC2 实例上拉取 docker 容器?
【发布时间】:2019-12-14 07:33:23
【问题描述】:

我想通过 ssh 将带有 gitlab-ci 的 docker 容器部署到 AWS EC2,但我不知道如何登录到 gitlab 注册表。我已经尝试使用CI_BUILD_TOKEN 并尝试使用密码变量登录,但均无效。

所以我无法登录注册表以从 gitlab 中提取 docker 容器。如何更改 Docker 登录命令以使登录成功?

image: docker:latest
...
deploy:
  stage: deploy
  script:
    - echo "$EC2_SSH_KEY" > "key.pem"
    - chmod 600 key.pem
    - apk update && apk add openssh
    - ssh -tt -i "key.pem" -o StrictHostKeyChecking=no ec2-user@....compute.amazonaws.com 'sudo docker login -u gitlab-ci-token -p "$CI_BUILD_TOKEN" $CI_REGISTRY'

【问题讨论】:

    标签: amazon-web-services docker ssh continuous-integration gitlab-ci


    【解决方案1】:

    根据 Gitlab 权限模型指南 [1],您使用的是正确的方法。 但是,您的引用可能会阻止 shell 执行变量扩展。

    GitLab 提供了 .gitlab-ci.yml 文件中的属性列表及其对应的变量扩展机制。您正在使用的脚本定义将扩展位置设置为脚本执行外壳 [2]。因此,文档的 Execution shell environment 部分 [3] 适用。它指出:

    这是在脚本执行期间发生的扩展。它的工作原理取决于使用的 shell (bash/sh/cmd/PowerShell)。

    对于大多数 Unix shell,最后一个脚本行的正确格式 [4] 应该是:

    ssh -tt -i "key.pem" -o StrictHostKeyChecking=no ec2-user@....compute.amazonaws.com "sudo docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"
    

    参考文献

    [1]https://docs.gitlab.com/ee/user/project/new_ci_build_permissions_model.html#container-registry
    [2]https://docs.gitlab.com/ee/ci/variables/where_variables_can_be_used.html#gitlab-ciyml-file
    [3]https://docs.gitlab.com/ee/ci/variables/where_variables_can_be_used.html#execution-shell-environment
    [4]https://unix.stackexchange.com/questions/425561/shell-script-how-to-expand-a-variable-into-quotes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-02
      • 2020-10-04
      • 2018-12-04
      • 2023-02-26
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多