SVN Post-Commit Hook发布网站?

时间:2014-01-12 18:23:03

标签: linux shell svn amazon-ec2

我在免费的EC2 AWS服务器上安装了SVN实例。简而言之:我正在使用LAMP。

使用我在this article中阅读的内容,并在评论中提到“遇到TTY”错误。我跟着second resource并清除了错误消息,但似乎没有执行脚本。但是,当我手动运行脚本时,它可以工作。

有什么线索我缺少什么?

当我按照第二个资源修复TTY错误时,我更改了我的/ svn / repository / hooks / post-commit脚本的内容:

#!/bin/bash
sudo /usr/local/bin/svn-post-commit-update-mysite 1>&2

为:

#!/bin/bash
su –session-command=”/usr/local/bin/svn-post-commit-update-mysite 1>&2″ dynamic &

2 个答案:

答案 0 :(得分:1)

第一个可能的问题:

你不能依赖钩子里面的$ PATH变量的值。这意味着您需要为所有可执行文件指定完整路径。

特别是,“su”是大多数发行版中位于“/ bin / sh”的程序。确定,输入

type su

下一个可能的问题:

您的subversion服务器是否以root用户身份运行?如果由其他用户运行,su将尝试请求密码,如果没有以交互方式运行,则会失败 - 即使用户位于sudoers文件中!

如果您使用的是Apache + DAV,这意味着必须以root用户身份运行apache服务才能使用(而不是www-data),这是一个严重的安全问题。

如果所有文件都归同一用户所有(例如,www-data),则可能根本不需要使用susudo。您可以使用类似

的内容更改站点文件的所有权

sudo chown -R www-data:www-data /var/www/<my-project>

然后从钩子和svn-post-commit-update-mysite文件中删除sudosu

答案 1 :(得分:0)

我最好的猜测是脚本中的某些东西取决于PATH环境变量。出于安全原因,Subversion在空的环境中运行挂钩。因此,您需要在shell脚本中设置环境或使用绝对路径。

您可能需要阅读Subversion book entry on implementing hook scripts。我提到的具体问题在信息块中进行了解释。