大家,早安!
在我的日常工作中,我们使用 NGINX+uWSGI+MongoDB 作为 Python 应用程序容器。为了进行版本控制和协作开发,我们在每台开发人员计算机上安装 GIT,并使用中央 GIT 存储库进行交付。
一切都进展顺利,但有一个小问题。
到目前为止,当我们想要交付内部软件的新版本时,所有开发人员都会合并他们的更改,然后选定一个开发人员(通常是项目经理)将最终产品推送到我们中央 GIT 服务器上的“分支主”存储库中。
一旦完成推送,不断查找 GIT 的脚本就会检索新版本并将其推送到我们的 uWSGI 服务器,然后该服务器会为所有新连接加载新版本。
现在,我们想知道如何在 GIT 服务器上推送,以及如何让 uWSGI 直接从这个 GIT 服务器加载并提供其 web 应用程序。
有没有人已经有类似的解决方案或 uWSGI 配置来做到这一点?
答案1
基于服务器的 git-repo 根本不适合你;你总是依赖于一个本地 repo 克隆,它源自中央 git-repo(恕我直言)。你可以做些什么来摆脱丑陋的 cronjobs:使用 git 的接收前/后挂钩在你的 git 服务器上:
除了客户端钩子之外,作为系统管理员,您还可以使用几个重要的服务器端钩子来为您的项目实施几乎任何类型的策略。这些脚本在推送到服务器之前和之后运行。预钩子可以随时退出非零状态以拒绝推送以及向客户端打印错误消息;您可以根据需要设置尽可能复杂的推送策略。
还有信息丰富的关于网站登台的 git-post-receive-hook 的 stackoverflow 讨论;特别是查看顶部答案中的第一个链接git 网站操作指南
答案2
我在公司网站(它是从 github 存储库生成的)上使用的一个技巧是将这些选项添加到 uWSGI:
; reload the server everytime the repository is updated
touch-reload = .git/index
; every minute pull from the repository
cron = -1 -1 -1 -1 -1 git pull