我有一个 Amazon EC2 实例,其中有一个包含我的应用程序的裸 git 存储库。我设置了一个 post-receive 钩子,它会git checkout -f
进入我的 www。为了推送到这个存储库,我在本地存储库中设置了一个远程存储库,这样我就可以运行git push dev
,一切似乎都正常。
问题是,此代码也存在于 GitHub 上。这有点多余,并且无法查看提交历史记录和进入开发(或即将上线)环境的活动更新。此外,如果我的 EC2 设置发展成一个集群,我认为不可能git push dev
在集群中运行并推送到多个存储库。
GitHub 有几个 https 发布钩子,可以告诉我的服务器有人提交了。我的问题是,在不损害安全性或不影响我推送到的应用程序的依赖性的情况下,最好的方法是什么。例如,如果应用程序不可用,我仍然希望能够部署。
如果 URL 无法猜测,那么https://myserver.com/SOME_RANDOM_TOKEN
是否足以防止任何恶意行为?我想避免为此接收后的 URL 实施身份验证。
由于没有简单的方法将某些内容从存储库单独推送到服务器,因此应如何设置配置?分支应该是什么样子?
任何关于这些问题的答案或建议都将非常有帮助。提前致谢。
答案1
您可以在 Github 上设置一个提交后钩子,但它会遇到与您发现的很多相同的问题git push dev
—— Github 只会命中一个 URL,并且无法(直接)与集群一起工作。
我建议不要寻找“智能”方法,而是采用久经考验的简单方法,即使用部署脚本对所有需要的机器执行必要的推送/拉取/踢出/任何必要的操作。Capistrano、Vlad the Deployer 等部署框架以及许多其他选项(以您选择的语言提供)使常见情况下的生活更轻松,但即使是一个简单的 shell 脚本也会显著改善您的工作流程。