【问题标题】:How to deploy a Rails app with GitLab CI + Docker + Ansible?如何使用 GitLab CI + Docker + Ansible 部署 Rails 应用程序?
【发布时间】:2017-07-05 13:03:46
【问题描述】:

我有一个托管的 GitLab,上面有一些 Ruby on Rails 项目。我有一个 CI 脚本,它使用项目构建 Docker 映像并将其推送到 GitLab 注册表。最后,我需要将该映像部署到登台服务器。

stages:
  - test
  - build
  - deploy

# ...

build_image:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay
  script:
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN gitlab.host.com:4567
    - docker build -t gitlab.host.com:4567/group/app:$CI_BUILD_REF_NAME .
    - docker push gitlab.host.com:4567/group/app:$CI_BUILD_REF_NAME
  only:
    - master

我想用 Ansible 来做,但不知道怎么做。也许有人可以推荐要寻找什么或阅读什么?谢谢

【问题讨论】:

    标签: ruby-on-rails docker deployment ansible gitlab-ci


    【解决方案1】:

    我建议不要在 CI 中使用 Ansible。这通常会使事情变得复杂,因为运行 CI 的容器需要安装 Ansible 才能工作。但是这是可行的,我有这样的设置。另一个缺点是 Ansible 会“吃掉”输出,如果出现错误,则会以未格式化的方式打印出来。
    如果您的意图不是在 CI 中使用 Ansible,而是自己使用 Ansible 部署它,我也必须建议不要这样做。这将导致希望在 staging 服务器上更新的每个人都与您联系,或者他们需要访问 staging 服务器和 ansible playbook。他们还会问自己上次更新发生的时间。

    最好将您的代码放在一个不同的步骤中,将 ssh 放入机器,拉取图像,停止前一个并启动新的。你甚至可以在 Gitlab 中定义一个“暂存”环境,它会在最后一次更新完成时通知你。这对其他开发人员来说很方便。
    您可以将您的私有 ssh 密钥放入 Gitlab 秘密变量中,并将其放入 ~/.ssh/id_rsa 作为第一个部署步骤。然后,这将使您能够访问您的登台机器。您应该将他的用户称为“gitlab-staging”或类似名称,以便您可以将主机上的访问日志跟踪回此配置。

    希望对您有所帮助,如果您有任何问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 2017-07-29
      • 2017-05-21
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 2020-01-19
      • 2020-09-21
      • 1970-01-01
      相关资源
      最近更新 更多