SVN跨服务器配置post-commit提交后自动更新(SVN与WEB服务器不在同一台机器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SVN跨服务器配置post-commit提交后自动更新(SVN与WEB服务器不在同一台机器)相关的知识,希望对你有一定的参考价值。

背景情况:SVN与WEB不在同一台服务器上,需要SVN提交后WEB站点自动进行SVN UPDATE更新,查阅网上的教程,发现部分的细节和权限部分没有提到导致跨服务器ssh执行更新脚本失败,手动执行post-commit可以通过


需求:开发想要在项目修改并提交到svn服务器上后,web服务器能够自动进行svn update更新站点,并立即看到修改后的web页面效果


思路:项目提交时触发post-commit里面的脚本并写入到/var/log/svn.log中,脚本通过SSH免密登陆到WEB上然后再进行svn up.sh的脚本触发web站点更新


配置:SVN服务器一台(172.17.8.8) WEB测试服务器一台(172.17.8.9) 两台服务器均为CentOS7.4(1708)

            

          SVN项目版本环境在/svn/project(目录中含有db hook等文件)    WEB的网站路径为/var/www/html/project下



需要安装的软件:两台服务器均需要安装Apache软件(web服务器nginx也可以)和SVN软件,我的web测试环境为lamp


两台服务器均安装apache(httpd)、SVN(subversion),SVN服务器需要安装svn和apache的集成模块(mod_dav_svn),安装方式为yum install httpd subversion mod_dav_svn


在此不详细叙述SVN账号和密码以及权限的调试,只说post-commit、脚本、权限、以及log的写法和设置




1.两台服务器各建立系统账户为svn的用户名(useradd svn),并给svn用户设置密码(passwd svn) 注意:此步骤两台服务器都要做相同的操作


2.登陆SVN服务器做ssh免密码登陆web服务器的操作:


(1)在SVN服务器下,使用su - svn(要带-,说明环境变量也切换到svn下面) ,切换到svn用户上,执行ssh-keygen -t rsa,一路回车执行,成功的话会生成SHA256的密钥文件

(2)将svn用户下的密钥文件拷贝至web服务器下的svn用户ssh目录:ssh-copy-id -i /home/svn/.ssh/id_rsa.pub [email protected],输入密码后提示复制成功

(3)使用ssh登陆到web服务器:ssh [email protected],输入一次密码后,尝试再次执行该命令,确认能够免密登陆后即可。


3.将apache的启动进程用户修改成svn

vim /etc/httpd/conf/httpd.conf

找到User和Group(大约66 67行左右)将apache改为svn,:wq保存退出


将所有的svn目录下的权限修改成svn用户,使用-R递归方式

chown -R svn:svn /svn


4.进入项目目录,编写post-commit脚本并赋予其执行权限

vim /svn/project/hooks/post-commit

脚本如下:


#!/bin/sh
REPOS="$1"
REV="$2"
LOGFILE=/var/log/svn.log ##这里是为了保存日志并查看是否有报错,有报错说明执行了未成功,没报错说明未执行成功,检查权限,执行成功会有svn update信息
exec 1>>"$LOGFILE"
exec 2>&1
export.UTF-8
/usr/bin/ssh -l svn 172.17.8.9 "/bin/bash /shell/svnup.sh"
exit 0

保存退出


赋予post-commit可执行权限

chmod 777 /svn/project/hooks/post-commit


5.创建脚本日志并赋予svn权限

touch /var/log/svn.log

chmod 777 /var/log/svn.log

chown svn:svn /var/log/svn.log


6.修改完毕后重启Apache服务器使其生效

systemctl restart httpd.service


至此SVN服务器配置完毕

以上是关于SVN跨服务器配置post-commit提交后自动更新(SVN与WEB服务器不在同一台机器)的主要内容,如果未能解决你的问题,请参考以下文章

SVN post-commit hook:根据提交所属的项目更新工作副本

linux svn post-commit 更新 我的svn post-commit 当ide提交时候可以执行,但是svn update 却没成功

svn提交自动同步到web目录

svn关联Jenkins自动发布代码

svn自动同步配置

SVN提交以后出现出现post-commit hook failed 是啥原因?