Continuous integration 最好的gitlab-ci.yml ci/CD实践和运行程序配置是什么?

Continuous integration 最好的gitlab-ci.yml ci/CD实践和运行程序配置是什么?,continuous-integration,gitlab,gitlab-ci,continuous-deployment,gitlab-ci-runner,Continuous Integration,Gitlab,Gitlab Ci,Continuous Deployment,Gitlab Ci Runner,这有点理论性,但我会尽可能多地解释我的设置: 1个具有自托管gitlab的服务器实例 1个用于开发的服务器实例 1个用于生产的服务器实例 假设在我的gitlab中,我有一个ReactJs项目,我将gitlab-ci.yml配置为: job deploy_dev在推送到dev分支时,更新将通过rsync复制到/var/www/html/${CI_PROJECT_NAME}作为dev服务器的部署 获取作业deploy_dev的运行程序是一个安装在我部署到的同一个dev服务器上的共享运行程序,它使用r

这有点理论性,但我会尽可能多地解释我的设置:

1个具有自托管gitlab的服务器实例 1个用于开发的服务器实例 1个用于生产的服务器实例 假设在我的gitlab中,我有一个ReactJs项目,我将gitlab-ci.yml配置为:

job deploy_dev在推送到dev分支时,更新将通过rsync复制到/var/www/html/${CI_PROJECT_NAME}作为dev服务器的部署

获取作业deploy_dev的运行程序是一个安装在我部署到的同一个dev服务器上的共享运行程序,它使用reactjs标记获取作业

问题是: 如果我想部署到生产环境中,我应该遵循什么样的最佳实践

我设法想出了几个我想到的选择,但我不知道哪一个是最好的做法,如果有的话。以下是我的想法:

修改gitlab-ci.yml添加具有相同标记reactjs的job deploy_prod,但脚本应使用SSH与生产服务器的/var/www/html/${ci_PROJECT_NAME}同步

在生产服务器上设置另一个运行程序,让它使用reactjs prod标记拾取作业,并修改gitlab-ci.yml以使用reactjs prod标记部署_prod

除了上面提到的2种方法之外,你还有更好的方法吗

最后一个问题: 哪里是安装跑步者的最佳位置?我正在做的是让我的跑步者在我的开发服务器上运行,这真的可以吗


如果您能向我解释一下您选择的最佳方式,并说明其利弊,我将不胜感激。

最佳做法是将您的CI/CD基础结构与承载应用程序的基础结构分开。 这样做是为了尽量减少可能导致应用程序或运行程序出现问题的变量数量

当您在承载应用程序的同一台计算机上有一个运行程序时,请考虑以下场景:即使运行程序和应用程序在单独的Docker容器中运行,也可能发生以下场景。底层机器仍然是单点故障

运行程序执行CPU/RAM繁重的作业,并占用机器上的大部分资源。您的应用程序开始遇到性能问题

Gitlab runner崩溃并使主机处于不可操作状态。docker惊慌失措或者其他什么。 您的生产应用程序停止运行

你的应用程序会阻止主机运行,这并不重要。如果发生这种情况,您的CI/CD将停止工作,并且您无法将修复程序部署到生产环境中


考虑使用一台或多台单独的转轮机器。Gitlab runner可以水平扩展,用于将部署作业同时运行到开发服务器和生产服务器。

最佳做法是将CI/CD基础结构与承载应用程序的基础结构分开。 这样做是为了尽量减少可能导致应用程序或运行程序出现问题的变量数量

当您在承载应用程序的同一台计算机上有一个运行程序时,请考虑以下场景:即使运行程序和应用程序在单独的Docker容器中运行,也可能发生以下场景。底层机器仍然是单点故障

运行程序执行CPU/RAM繁重的作业,并占用机器上的大部分资源。您的应用程序开始遇到性能问题

Gitlab runner崩溃并使主机处于不可操作状态。docker惊慌失措或者其他什么。 您的生产应用程序停止运行

你的应用程序会阻止主机运行,这并不重要。如果发生这种情况,您的CI/CD将停止工作,并且您无法将修复程序部署到生产环境中


考虑使用一台或多台单独的转轮机器。Gitlab runner可以水平扩展,用于在开发服务器和生产服务器上运行部署作业。

非常感谢。我现在明白了前面的问题:非常感谢。我现在明白了前面的问题: