【问题标题】:How to push code to webserver every time I make a commit to a branch?每次提交分支时如何将代码推送到网络服务器?
【发布时间】:2016-05-25 04:03:28
【问题描述】:

我在 AWS ec2 实例上有一个 LAMP 堆栈(RHEL 7、apache 2.4),我的 webroot 目录是 var/www/html。我的 php 代码位于远程私有 github 存储库中(注意:这是一个 private 存储库)。我想做一个自动部署,这样每次我提交到一个分支(不是主分支,而是另一个分支)时,更新的 php 文件将立即在网络服务器上可用。

如何以最简单的方式做到这一点?请注意,我已经验证我们已经从 aws ec2 实例连接到 github,我们可以在 ec2 实例上安装 git 客户端。

【问题讨论】:

    标签: git apache amazon-web-services github deployment


    【解决方案1】:

    使用客户端提交后挂钩来推送它。见https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks。不要忘记使 .git/hooks/post-commit 文件可执行,并记住钩子文件不是被推送回服务器的 repo 的一部分。

    【讨论】:

    • 感谢分享。通过文档后,似乎我可以使用 post-commit 挂钩自动将代码推送到 Web 根目录。但是,为此我需要在网络服务器上设置本地存储库(例如 /home/project),并且任何对本地的提交都将立即在 /var/www/html 下可用。我的要求是,每当我从我的 Windows 机器(git commit 和 push)对“原点”进行提交时,它也会对 webserver 进行推送。所以,触发器从我的电脑传到远程,然后它也应该推送到网络服务器。想法?
    • 好的,在 post commit 钩子中,也许您可​​以查看提交是在哪个分支上进行的,如果它是您感兴趣的分支,则可以进行推送。您可以通过解析 git branch 的输出以获取以星号开头的分支名称来确定哪个分支是活动分支,或者您可以查看 .git/HEAD 文件,因为它指向当前的 ref(分支)。您可以通过以特殊方式命名分支来概括这一点,这样如果在分支名称中找到该特殊模式,那么脚本会自动知道要推送以及推送到哪里,如果您想花哨的话。
    • 还有一个 pre-push 钩子,如果你想在推送到本地 repo 时触发,你可以使用它。看起来还有 pre-receive 和其他钩子,它们说当他们收到提交时它们在本地 repo 上运行,所以也许你也可以将逻辑放入本地 repo,然后将自己推送到远程 repo。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 2012-12-03
    • 2014-10-07
    • 2019-11-23
    • 2014-09-11
    • 2018-11-20
    相关资源
    最近更新 更多