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

时间:2017-07-05 13:03:46

标签: 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做这件事,但无法想象如何做到这一点。也许有人可以推荐寻找什么或者阅读什么? Thanx

1 个答案:

答案 0 :(得分:1)

我建议不要在CI中使用Ansible。这通常会使事情变得复杂,因为运行CI的容器需要安装Ansible才能工作。这是可行的,我有这样的设置。另一个缺点是Ansible'吃掉了输出,如果有错误,请以未格式化的方式打印 如果你的意图是不在CI中使用Ansible并且只是用Ansible自己部署它,我也必须反对这一点。这将导致希望在登台服务器上进行更新的所有人与您联系,或者他们需要访问登台服务器和ansible playbook。他们也会问自己上次更新的时间。

最好将代码放在一个不同的步骤中,将ssh放入机器,拉动图像,停止前一个并启动新的。你甚至可以定义一个' staging' Gitlab中的环境,它将在上次更新完成时通知您。这对其他开发者来说非常方便 您可以将私有ssh密钥放在Gitlab秘密变量中,并将其作为第一个部署步骤放在〜/ .ssh / id_rsa中。这将使您可以访问您的登台机器。你应该打电话给他的用户' gitlab-staging'或类似的东西,以便您可以跟踪主机上的访问日志回到此配置。

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