我想在本地为我的测试服务器设置自动部署脚本
我在ubuntu桌面11.04上使用gitolite。
我使用apt-get install gitolite安装gitolite,因此创建用户gitolite和组gitolite
现在我使用apache设置我的测试网络服务器,其中包含用户和组ivan:ivan,
并在该用户名下进行git clone
所以所有文件和文件夹都有相同的文件所有者ivan:ivan。
我在/ var / lib / gitolite / repository / testrepo / hooks /下设置了post-receive钩子,并在里面设置了这个脚本:
#!/bin/bash
#CONFIG
LIVE="/home/ivan/public_html/testrepo"
read oldrev newrev refname
if [ $refname = "refs/heads/master" ]; then
echo "===== DEPLOYING TO TEST SITE ====="
unset GIT_DIR
cd $LIVE
git pull origin master:
echo "===== DONE ====="
fi
由于后接收挂钩由gitolite用户执行,因此访问使用用户ivan的测试服务器存在权限问题。
我已经将iitite添加到ivan组并使其进行组访问写入,但仍然无法运行 我知道这是一个许可问题,但我不知道解决方案 如果您有相同的经验或得到任何提示,我会非常感激。
感谢
伊万
答案 0 :(得分:3)
我终于得到了解决方案,感谢VonC的指示 我的解决方案可能不是美,但还有效。
以下是我的解决方案中的步骤:
我创建了一个裸存储库,它与Web应用程序具有相同的用户权限。
在Gitolite Repositories文件夹中(在Ubuntu:/ var / lib / gitolite / repositories中),我创建了一个post-receive钩子,它将镜像存储库我刚刚创建的裸仓库。代码是:
#!/bin/bash
echo '==== DO MIRROR ===='
git push --mirror user@host:path/to/bare.git
echo '==== DONE MIRROR ===='
在我的网络应用程序中,我将创建一个连接到该裸仓库的遥控器。
然后我在镜像裸仓库中创建一个post-receive钩子,它会要求Web应用程序从中拉出来。代码:
#!/bin/bash
WORK_DIR="/home/ivan/public_html/test/testing"
read oldrev newrev refname
if [ $refname = "refs/heads/master" ]; then
echo "===== DEPLOYING TO LIVE SITE ====="
unset GIT_DIR
cd $WORK_DIR
git pull mirror-repo master
echo "===== DONE ====="
fi
不要忘记chmod + x进行后接收。
正如我之前所说的那样,它可能并不漂亮,但仍然有效,至少对于我目前的情况而言。我不仅仅是从gitolite存储库中提取它的原因是因为用户文件权限。在Ubuntu(从apt-get安装),gitolite持有用户和组,gitolite:gitolite。我的网络应用程序在我的主文件夹下(我正在使用suPHP),其中有用户和组ivan:ivan。 因此,当我推送到gitolite存储库时,它将在gitolite用户下运行bash脚本,该用户无法访问我的主文件夹下的.git文件夹。
是的,对于那些有更好解决方案的人,我很想听到你的意见 谢谢希望我的解决方案可以帮助他人 伊万
答案 1 :(得分:0)
经过长时间的谷歌搜索后,当发生任何推送时,我很沮丧地实施此自动拉取功能。但我自己的方式有3个简单的步骤。
添加状态变量/ var / lib / gitolite / stat / project
vim /var/lib/gitolite/repositories/project.git/hooks/post-receive
#!/bin/bash
echo '==== DO MIRROR ===='
echo '1'>/var/lib/gitolite/stat/project
echo '==== DONE MIRROR ===='
以root身份准备脚本权限
vim /var/lib/gitolite/stat/autopull.sh
#!/bin/bash
hstat=`cat /var/lib/gitolite/stat/project
enter code here
if [ "$hstat" == 1 ]; then
cd /home/suphpuser/public_html_staging/project
git pull
chown -R suphpuser.suphpuser /home/suphpuser/public_html_staging/project
echo '0'>/var/lib/gitolite/stat/project
fi
运行脚本
/var/lib/gitolite/stat/autopull.sh
这就是全部:)