【问题标题】:How to create a SVN Hook post-commit on a Plesk 11 Server for a svn+ssh tunnel user?如何在 Plesk 11 服务器上为 svn+ssh 隧道用户创建 SVN Hook 提交后提交?
【发布时间】:2014-08-05 15:31:58
【问题描述】:

在我的 Plesk 11 服务器上,我创建了一个子域:sub.domain.tld

我为所有用户创建了一个 svn+ssh 隧道。通过此隧道提交的所有用户。

现在我想创建 SVN Hook,这样每次提交都应该直接更新到 sub.domain.tld

我正在使用这个tutorial,但我总是得到 /bin/sh: /var/.../hooks/post-commit: Permission denied

我猜是因为域和子域是从 Plesk 本身创建的。

如何使我的 subversion 能够提交到 Plesk 创建的目录中?

【问题讨论】:

    标签: svn plesk post-commit post-commit-hook


    【解决方案1】:

    Subversion 如何服务无关紧要,所有钩子在服务器上的操作方式都相同。

    Hooks 由服务器执行。因此,您需要确保钩子本身具有执行权限集,并且它属于运行 SVN 服务器的用户。此外,执行钩子时,环境会被清除干净。所以,$PATH 可能没有按照您想要的方式设置。

    通常,当您看到此类错误时,是由这些问题之一引起的。我的建议是做一个非常简单的 hook(这是 Unix/Linux 版本):

    #! /bin/bash
    echo "The hook has executed" >&2
    exit 2
    

    这个钩子肯定会失败,这正是你想要的。当钩子失败时,打印到 STDERR 的输出将返回给用户。您应该会看到如下内容:

    The post-commit hook failed with the output of "The hook has executed"
    

    如果你没有看到,你就知道 Subversion 没有执行你的钩子,这不是钩子的问题。检查上面提到的事情:执行位是否在钩子上?是执行 Subversion 服务器进程的用户拥有的钩子(和整个存储库)。 (例如,在 Apache httpd 下运行时,通常是 apache、httpd 或 wwwrun。

    由于您在 svn+ssh 下运行,您需要确保 GROUP 所有权与您的用户是同一组,GROUP 执行权限是设置正确,并且所有用户的 UMASK 都设置为 0002 而不仅仅是 0022。


    现在,让我们看看你想要什么:

    现在我想创建 SVN Hook,这样每次提交都应该直接更新到 sub.domain.tld

    您似乎希望在有人提交更改时更新特定的工作副本。您可以通过预提交挂钩来执行此操作,但我建议您使用 Jenkins 处理此类内容。

    • 它将允许您跳过可能需要一段时间才能更新的提交后挂钩。例如,您可能希望在更新后重新启动服务器。当 post-commit 钩子运行时,不允许其他人进行进一步的更改。另外,进行提交的用户必须等待提交后挂钩运行。也许整个过程只需要 20 到 30 秒,但想象一下用户在提交后挂钩运行时必须等待这 20 到 30 秒。
    • 它会给你更多的控制。每当我做这样的事情时,我都有两个服务器目录:我的第一个是服务器使用的 active 目录。我的第二个是 inactive 目录,它只是坐在那里并获得更新。发生更新时,我会更新非活动目录,然后重新启动服务器并更改这两个目录。现在,我的服务器使用之前更新的非活动目录,而我的正式非活动目录等待更新。这可以防止有人在我的活动服务器目录正在更新时发出服务器请求的情况。
    • 这将允许进一​​步扩展。例如,您可能决定并非所有提交都应该更新服务器。相反,只有当用户进入 Jenkins 并请求它时,服务器才会更新。或者,也许当更新发生时,您想要运行一些测试。你当然不能用 post-commit 钩子做到这一点,但你可以用 Jenkins。也许您想更新几台服务器。同样,使用 Jenkins 更容易。

    【讨论】:

    • 感谢您的回答。 1. 我的系统中只有一个用户(和根用户),我将它用作所有使用 svn 的开发人员的隧道。我希望这个案子也能奏效。无论如何,让我检查一下,我会回你!
    • 等待:首先,由于安全隐患,您不应该使用 root。用户是否使用“root”作为 svn+ssh 的一部分?
    • 不...我没有为 svn+ssh 使用 root!
    • 谢谢你!我通过将 svn+ssh 隧道用户添加到 psaserv 组来解决。
    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2011-06-28
    • 2019-02-16
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多