我有一个托管的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
答案 0 :(得分:1)
我建议不要在CI中使用Ansible。这通常会使事情变得复杂,因为运行CI的容器需要安装Ansible才能工作。这是可行的,我有这样的设置。另一个缺点是Ansible'吃掉了输出,如果有错误,请以未格式化的方式打印 如果你的意图是不在CI中使用Ansible并且只是用Ansible自己部署它,我也必须反对这一点。这将导致希望在登台服务器上进行更新的所有人与您联系,或者他们需要访问登台服务器和ansible playbook。他们也会问自己上次更新的时间。
最好将代码放在一个不同的步骤中,将ssh放入机器,拉动图像,停止前一个并启动新的。你甚至可以定义一个' staging' Gitlab中的环境,它将在上次更新完成时通知您。这对其他开发者来说非常方便 您可以将私有ssh密钥放在Gitlab秘密变量中,并将其作为第一个部署步骤放在〜/ .ssh / id_rsa中。这将使您可以访问您的登台机器。你应该打电话给他的用户' gitlab-staging'或类似的东西,以便您可以跟踪主机上的访问日志回到此配置。
希望这有帮助,如果您有任何问题,请告诉我。