ruby-on-rails - 如何使用 GitLab CI + Docker + Ansible 部署 Rails 应用程序?

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

我有一个托管的 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 来做,但不知道怎么做。也许有人可以推荐要寻找什么或阅读什么?谢谢

最佳答案

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

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

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

关于ruby-on-rails - 如何使用 GitLab CI + Docker + Ansible 部署 Rails 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44927096/

相关文章:

ruby-on-rails - rails 4.1 无法获取所有枚举类型

ruby-on-rails - 具有属性 : correct way to pass in model 的 Rails 构造函数 "def initialize"

vagrant - Docker 和 shell 配置程序的奇怪 Vagrant 错误

mongodb - 带有rs.add()的MongoDB脚本未按预期执行

tomcat - 使用build部署到生产的最简单方法

ruby-on-rails - 没有路线匹配 [GET] "/microposts/x"第 10 章,Hartl 的 Ruby on Rails 教程应该删除链接

javascript - Rails 4 Turbolinks 未加载 MathJax

wordpress - WordPress Docker镜像错误-拒绝连接-在插件详细信息预览期间

asp.net - 网站部署后需要强制刷新

deployment - kubernetes 部署中当前和可用的 pod 副本有什么区别?