好了,我在我的服务器上设置了一个SVN repo。我有一个提交后钩子设置,它更新到"DEV“文件夹,这样当我提交更改时,它会自动推送到我服务器上的"DEV”子域。
我现在需要的是一个简单的方式来推动它到我的“生活”子域时,我准备好了。"Live“子域在同一服务器上,实际上,它将是相同的svn更新/……命令,与DEV相同,但路径不同。
我想我可以在我的repo中有一个特定的文件,也许我可以更改这个文件,然后在提交后的文件中设置一些条件,如果这个特定的文件发生了更改,也可以更新到我的"live“目录。
但我不知道如何写这些代码。目前,我的提交后文件如下所示:
#!/bin/sh
REPOS="$1"
REV="$2"
svn update /var/www/dev/public我需要它基本上做到这一点(但显然,使用正确的语法)
#!/bin/sh
REPOS="$1"
REV="$2"
svn update /var/www/dev/public
if (pushLive.txt has changed) {
svn update /var/www/live/public
}有人有什么建议吗?
发布于 2012-01-31 11:36:53
不确定这是否是最有效的方法,而且从技术上讲,第一种情况将在一个名为"pushLive.txt“的文件上工作,而不管目录是什么,所以你可能想要使用它或确保文件是唯一的……
#!/bin/sh
LOOK=/usr/bin/svnlook
REPOS="$1"
REV="$2"
for changes in `$LOOK changed $REPOS | awk '{print $1 "=" $2;}'`;
do
idx=`expr index "$changes" =`;
directory=${changes:$idx};
action=${changes:0:$idx-1};
case "$directory" in
*pushLive.txt )
case "$action" in
"U" )
svn update /var/www/dev/test/public
;;
esac
;;
esac
done
exit 0发布于 2012-01-31 03:54:36
我不会通过post-commit钩子这样做,因为更新可能需要很长时间。这意味着用户必须等待您的更新完成,然后才能再次控制他们的工作站。
看看Jenkins吧。
Jenkins是一个持续构建服务器,但即使您没有构建,也可以使用它。在您的例子中,您可以使用它来查看活动域的Subversion存储库。当Jenkins在该Subversion URL上检测到提交时,它可以生成一个构建过程。在您的示例中,它将更新实时服务器上的文件。
如果您的服务器是运行Jenkins的同一台计算机,那么可以很容易地将Jenkins工作目录指定为/var/www/live/public目录。(默认情况下,Jenkins将在$JENKINS_HOME/jobs/<jobname>/workspace下创建构建目录,但在Jenkins中有一个选项,您可以在其中指定它)。然后,根本就不需要编程了。这比使用提交后钩子更快、更容易。
顺便说一句,如果您采用这种方法,我建议您创建一个新的更新到一个干净的目录,然后重命名该目录。否则,当Subversion更新您的服务器时,您将同时拥有来自以前和当前Subversion修订版的文件。如果在进行更新时有人在服务器上,这可能会导致问题。
https://stackoverflow.com/questions/9068905
复制相似问题