GitLab CI/CD限制还是更好的解决方案?

GitLab CI/CD限制还是更好的解决方案?,gitlab,gitlab-ci,Gitlab,Gitlab Ci,这个问题更具信息性:我有一个项目是通过Django、Gunicorn、Supervisor运行的,还有PostgreSQL数据库、Redis缓存、nginx存储等 问题是,可以在容器(Docker,e.t.c.)外部使用CI/CD运行此工具。就像Gitlab在生产分支(受保护)上获得推送/合并请求一样,更新代码,如果此工具未启动,则启动它们。已经启动的工具可以获得检查配置的命令,像Django这样的工具可以重新加载热点,不需要通过终止进程来重新启动 比如,有没有办法做到这一点?可以使用shell

这个问题更具信息性:我有一个项目是通过Django、Gunicorn、Supervisor运行的,还有PostgreSQL数据库、Redis缓存、nginx存储等

问题是,可以在容器(Docker,e.t.c.)外部使用CI/CD运行此工具。就像Gitlab在生产分支(受保护)上获得推送/合并请求一样,更新代码,如果此工具未启动,则启动它们。已经启动的工具可以获得检查配置的命令,像Django这样的工具可以重新加载热点,不需要通过终止进程来重新启动

比如,有没有办法做到这一点?可以使用shell脚本或其他东西来复制代码吗?Gitlab和project在同一台计算机上运行(当前手动运行,站点托管在
site\u url.com
,Gitlab托管在
git.site\u url.com

因为在标准的方式下,容器只能运行测试,而我会自动地更新代码

或者我应该使用其他工具来实现这一点,不可能使这个过程自动化吗

如果你知道任何指南,请链接它


注意:之所以使用Gitlab,是因为有几个人参与了代码的编写。

您可以使用目标计算机上安装的的Gitlab Runner来完成这一切

或者,您可以使用,并可以在另一台计算机上安装runner,然后连接到目标计算机

在作业中,您可以使用命令,就像您将SSH插入目标计算机一样,如下所示:

variables:
  GIT_STRATEGY: none

stages:
  - update-code
  - restart-services

update-code:
  stage: update-code
  script: 
    - cd /mydir
    - git pull

reload-nginx:
  stage: restart-services
  script: 
    - service nginx reload

restart-redis
  stage: restart-services
  script:
    - service redis restart
有一些关于选择什么执行者的指示。您想要自动化手动任务,所以我的建议是使用SSH或Shell,如果您想要一个干净且可复制的测试环境,请使用Docker或Kubernetes executor


使用
variables:GIT\u STRATEGY:none
确保您的跑步者不会首先克隆您的repo来运行测试等(这是“正常”CI设置中的默认行为)。

这看起来不错,因此,据我所知,首先,我找到了我的代码所在的文件夹,并使用
git pull
将我的代码更新到最新版本,然后我会进行所有手动工作,以重新启动/重新配置我需要的任何服务,对吗?这是正确的。另一种方法是更改Gitlab CI worker目录的默认位置,但我会尝试这样做first@XCanG我添加了一个小的调整,以确保您的CI不会首先在其工作目录中克隆您的repo。它有什么变化?在我的最后一个yaml中,我只有在生产分支上有更新时才会触发所有这些代码,因此它不会影响开发分支上的任何拉/合并。通常情况下,您的代码会在构建目录中签出,您可以手动执行git拉,所以不需要这样做。如果这对你有效,请标记为答案。