我正在为我们团队的应用程序构建以下设置:
- 一个类似 Heroku 的虚拟机,上面运行着 Dokku(结果是 git 和 Docker)
- 我在同一台机器上使用另一个 Docker 容器来托管 repo(通过 Gogs,但它真的可以是任何 github-clone)
- 我想使用 Gogs 存储库作为项目的主要存储库,并使用 Dokku 生成的容器作为应用程序的部署实例
- 我希望这个应用程序在代码被推送到 Gogs 存储库后立即自动重新部署(基本上我想要一个始终与我们存储库的主分支同步的暂存环境)
我试图弄清楚如何设置它。由于 Gogs 环境是 GitHub 的副本,而 Dokku 是 Heroku 的副本,因此我也添加了这两个标签。基本上我试图让 GitHub 在提交时自动部署到 Heroku。我可以访问 Gogs 中的 webhook 和 git hooks。
以下是我正在考虑的方法,但我不知道每种方法的可行性以及出于时间/稳定性的考虑应该放弃哪些方法:
- 向 Gogs 添加一个提交 webhook 以触发 API 端点,用于围绕另一个 git 实例的一些包装器(这将有效地作为唤醒 ping 工作),然后这个包装器会将 Gogs 存储库拉入其本地存储库,然后将其推送到 Dokku . (这对我来说似乎有点脆弱)
- 将某种 git hook 写入 Gogs,以便它直接推送到 Dokku。(这将是理想的,虽然我不知道这是否可以通过 Gogs 的界面实现)
- 有一个定期的 cron-job 进行同步(我不喜欢这个,因为我想在不增加服务器开销的情况下最小化延迟,尽管 30 秒的 ping 可能不会是世界末日)