Mih*_*rju 1 continuous-integration continuous-deployment gitlab docker
我的应用程序是使用 3 个 Docker 服务构建的:
到目前为止,我一直在手动登录自己的 Digital Ocean 服务器,克隆存储库并使用docker-compose build && docker-compose up.
我想从现在开始自动化这个过程。
鉴于 Gitlab CI/CD Pipelines 和运行程序,将代码自动部署到 Digital Ocean 服务器的最佳方法是什么?
[我在想什么,可能看起来很“初学者”]
想法 1:一旦将提交推送到 master -> Gitlab runner 将构建服务,然后通过 .gitlab 将其复制到 DO 服务器scp。问题:您如何启动服务?您是否通过ssh运行程序连接到 DO 服务器,然后在那里运行启动脚本?
想法 2:在 DO 服务器上注册一个 worker,这样当它从 Gitlab 拉取数据时,它在 DO 服务器上拥有代码。它只需要构建它们并运行。但是这种方法不可扩展并且看起来很笨拙。
我正在寻找一些思考指南或循序渐进的方法。
在生产部署场景中使用 Docker 的好处之一是,您无需将scp应用程序代码分开;您需要的一切都内置在图像中。
如果您使用的是像 Ansible 这样可以直接在远程主机上运行容器的自动化系统,那么这很简单。您的 CI 系统构建 Docker 镜像,用一些独特的版本标记标记它们,并将它们推送到存储库(Docker Hub,由您的云提供商提供的东西,您自己运行的一个)。然后它会触发自动化系统告诉它使用您构建的映像启动容器。(就 Ansible 而言,它通过 ssh 运行,因此这或多或少相当于其他基于 ssh 的选项;像 Chef 或 Salt Stack 这样的工具需要在目标系统上使用专用代理。)
如果你没有这样的自动化系统,但你在目标系统上安装了 ssh 和 Docker Compose,那么你可以只将docker-compose.yml文件复制到目标主机,然后启动它。
TAG=...
docker push myname/myimage:$TAG
scp docker-compose.yml root@remote:
ssh root@remote env TAG=$TAG docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用像 Kubernetes 这样的专用集群管理器,并与其 API 对话;然后集群将自己拉取更新的容器,您无需 ssh 任何东西。在您讨论的规模上,这可能比您需要的重量要重得多。
| 归档时间: |
|
| 查看次数: |
1853 次 |
| 最近记录: |