我正在尝试弄清楚如何使用 git 来部署站点。
理论上有3个联系:
- [本地机器]我的本地编码机器
- [gitolite 服务器]使用 Gitolite 进行私人仓库托管
- [网络服务器]带有克隆的 VPS 托管--裸机
我git push
的代码来自[本地机器]到[gitolite 服务器]但是我如何推送我的代码[吉托莱特]致我的[网络服务器]
我想使这个自动化,所以我所要做的就是完成一个git push
。
最好的方法是设置一个钩子[gitolate 服务器]repo 来运行post-update
或post-receive
脚本?但既然它是一个--bare
repo,这是否意味着我需要git push
从[gitolite 服务器]到[网络服务器]的克隆 repo,git pull
因为该--bare
repo 没有工作树,所以我无法运行?
抱歉,提前致谢
西部数据
答案1
一个解决方案是:
- 在 gitolite 服务器上放置一个 post-receive 钩子,以自动推送到 Web 服务器
- 在 Web 服务器上放置一个 post-receive 钩子来部署代码(我通常使用 git archive 来实现这一点)
然后你推送到 gitolite,它会推送到 Web 服务器,然后部署你的新代码。完成!
另外,你可以将 Web 服务器上的 git repo 排除在外,并让 gitolite post-receive 钩子执行以下操作:
git archive --format=tar master | (ssh -i $KEYFILE user@webserver tar -x -C /dest/dir )
这将直接从 gitolite 钩子执行部署。这假设您可以以在 $KEYFILE 中拥有私有 ssh 密钥的“用户”身份通过 ssh 进入 Web 服务器,这可能会产生一些安全影响,因为任何可以读取 gitolite 钩子的人都可能能够获取这些值。