使用一个命令部署到网络服务器 & github

Deploying to web server & github with one command

我有一个 Web 服务器,文件夹 /var/git/mysite.com.git 中有一个裸仓库。我的 hooks/post-receive 看起来像这样:

#!/bin/sh GIT_WORK_TREE=/var/www/mysite.com/public_html git checkout -f

I 运行 git push live master(其中 live 是我在生产服务器上的远程名称)并且 post-receive 正确执行并将文件放在他们需要在网络根目录中。然后我必须 运行 git push origin master 将副本推送到我的 github(对于 backup/review)。我可能会以相反的顺序执行这些操作,因为它完成了同样的事情。

有没有办法用一个命令完成这两个步骤?似乎我可以将第二个 git push 命令放在 post-receive 或其他地方(在 Github 上?)将回购推送到两个远程位置,但我还没有找到解决这个问题。

我将 Jenkins 用于此类部署任务。它是一个非常好的系统,可以执行 运行 任务并在部署前检查您的代码。

https://jenkins-ci.org

另一种解决方案是 Ansible to 运行 代码在你的服务器上(在所有服务器上)与 Jenkins 的结合非常好。

http://www.ansible.com/home

或者您可以编写一个包含所有命令的简单 shell 脚本,然后在挂钩中调用它。但我更喜欢部署系统而不是 运行 一些任务并在投入生产之前检查我的代码。

您可以将以下行添加到您的 ~/.gitconfig 文件中,以使用别名实现此目的:

[alias]
  push-live = !git push live master && git push origin master

然后你可以运行git push-live,推送到两个遥控器。