【问题标题】:Deploying to web server & github with one command使用一个命令部署到 Web 服务器和 github
【发布时间】:2015-05-26 22:52:06
【问题描述】:

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

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

我运行git push live master(其中live 是我在生产服务器上的远程名称)并且后接收正确执行并将文件放在它们需要在Web 根目录中的位置。然后我必须运行 git push origin master 将副本推送到我的 github(用于备份/查看)。我可以按照相反的顺序执行这些操作,因为它完成了同样的事情。

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

【问题讨论】:

    标签: git github ubuntu-server


    【解决方案1】:

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

    https://jenkins-ci.org

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

    http://www.ansible.com/home

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

    【讨论】:

    • 我会看看这些潜在的解决方案,如果我使用任何一个,我都会接受你的回答。这可能是解决它的唯一方法。我想写一个简单的shell脚本真的应该也能做到,但我认为可能有一个钩子可以解决这个问题
    • 通常在部署过程中你会做很多事情,比如运行单元测试或检查代码是否存在安全问题等等。使用 Jenkins,您可以添加服务器并在所有服务器上运行命令,或者在部署到服务器之前运行单元测试。
    【解决方案2】:

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

    [别名] push-live = !git push live master && git push origin master

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

    【讨论】:

    • 好主意,看起来这种需求很普遍,所以很奇怪你必须在本质上“创建一个黑客”来完成这个
    • 我将别名放在 repo 的 .git/config 文件中。这样,我只需复制该行并将其放入我需要执行此操作的每个 repo 中,而不是为此使用专门的 bash 脚本。
    猜你喜欢
    • 1970-01-01
    • 2015-12-16
    • 2019-05-18
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多