SVN 使用hooks 自动更新到远程的web目录下

环境: A机器192.168.1.10  作为SVN的服务端     (环境 apache svn ssh)

环境: B机器 192.168.1.20    (环境 nginx php ssh svn 作为客户端)

目的:开发人员上传代码到A机器时, 会自动更新到B机器上nginx代理服务器的web目录,  以便开发人员直接访问.

环境搭建:

A机器apache+svn环境的配置. http://my.oschina.net/denglz/blog/89183

配置好以后svn的基础功能(检出/更新 等)已经可以实现了!

主要的配置文件有

httpd.conf: apache的配置文件需要添加svn模块.

authz.conf: 版本库的权限控制文件!

passwd.conf: svn用户的密码文件!

B机器nginx + php 环境的配置.

php可以用yum安装能解析就行, nginx安装很简单.

--------------------------------------------------------------------------------

下面是A机器环境的具体介绍!

A机器apache配置文件httpd.conf中svn模块的内容

<Location /svn>
DAV svn
#SVNListParentPath on
SVNParentPath /data/svn/
SVNListParentPath on
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /data/svn/passwd.conf      #在这里已经指出了svn用户密码文件的位置
AuthzSVNAccessFile /data/svn/authz.conf  #在这里已经指出限制版本库权限文件的位置
Require valid-user
</Location>

注意!!! 运行apache的用户是www.

A机器上版本库的位置

[root@A /]# ls /data/svn/    #/data/svn 是版本库的主目录
admin  authz.conf  passwd.conf

#admin是一个版本库权限是777这样是不安全的但是方便所以..!    authz.conf 和 passwd.conf 也在 /data/svn目录里面!

A机器用户的添加

/usr/local/apache2/bin/htpasswd -m /data/svn/passwd.conf  deng用户名

[root@A /]# cat /data/svn/passwd.conf
www:$apr1$1g7Hhl1.....加密......        #添加后的用户名和密码在passwd.conf文件里.

A机器版本库的权限设置

[[email protected] /]# cat /data/svn/authz.conf
[admin:/]
deng = rw

环境介绍完毕现在先实现svn在本机上的自动更新吧!

scp /data/svn/admin/hooks/post-commit.tmpl /data/svn/admin/hooks/post-commit   复制一份post-commit    (每当有提交请求的时候都有执行post-commit)

修改vim /data/svn/admin/hooks/post-commit  注销原有的内容!添加如下内容

export LANG=en_US.UTF-8  
SVN=/usr/bin/svn  #必须写绝对路径
STATIC_DIR=/web/root/wwwdeng  #注意权限问题
$SVN update  $STATIC_DIR --username deng --password 123456 --no-auth-cache    #必须加上--no-auth-cache不然会报错!!

还有就是/data/svn/admin/hooks/post-commit 默认使用的shell类型是sh,最好改成bash

这样就实现了自动更新到本地的 /web/root/wwwdeng目录了, 看网上好多文章还修改了/data/svn/admin/conf目录下的三个文件,这是因为我们用的是apache+ svn 用户密码文件和定义库权限的文件在apache配置文件里的svn模块中已经指定了,所以这三个文件我就不需要在修改了, 他们需要修改是因为她们只安装了svn,没有和apache整合在一起!! (apache和svn整合在一起的用户名密码文件中的密码是经过加密的!)

注意系统用户www对post-commit文件要有可执行权限,并且对/web/root/wwwdeng目录要有写的权限!! 注意!!! 运行apache的用户是www,svn通过apache实现检出和提交.

svn更新到远程机器的web目录下. (实现远程更新主要用的是ssh无密码登陆)

首先实现 A机器通过ssh无密码登陆B机器,

参考http://blog.csdn.net/lin_fs/article/details/7309714   写的很详细!  #

实现ssh无密码访问后,修改A机器的post-commit文件

vim /data/svn/admin/hooks/post-commit   #注释掉所有内容,只添加下面一行内容!

/usr/bin/ssh -l root  192.168.127.183 "/bin/bash /home/www/svnup.sh"    #svnup.sh

#post-commit 文件里面不仅仅可以写svn的更新脚本,写其它的也行!(开始我还以为只能写svn的更新命令呢!! 唉.....),

然后在B机器的/home/www/目录创建svnup.sh可执行文件

vim /home/www/svnup.sh

/usr/bin/svn update /web/root/code   #就这一行内容!

#整体来说是,如果admin版本库有提交请求的时候自动会执行post-commit,post-commit可执行文件通过ssh来让远程机器自动更新svn.

主要注意!  post-commit 的权限,和 svnup.sh的权限!!!!

时间: 2024-10-13 12:33:16

SVN 使用hooks 自动更新到远程的web目录下的相关文章

SVN使用hooks自动更新

由于项目测试环境频繁提交, 每次都上去切浪费很多精力,就打算采用SVN自动更新的方法来节省此操作 采用SVN自带的hooks来实现 具体操作 在svn安装目录下(非项目目录) 进入hooks目录 看到post-commit.tmpl cp post-commit.tmpl post-commit vim post-commit 如果需要多目录更新,可以把我上面的注释去掉 最后更改post-commit的执行权限, 我这边为了方便直接改成0777 也可以改成apache的 SVN使用hooks自动

CentOS 7 环境下部署 SVN 并实现自动更新(版本库放在Tomcat下)

1.安装 SVN 1.1先检查是否有安装 svn rpm -qa subversion #没有什么显示就说明没有安装过yum remove subversion #如果有安装就运行删除老版本yum install subversion #运行安装SVN 1.2创建SVN版本库(这里我们直接部署到Tomcat/webapps下,如果没有可以自行部署一个Tomcat) mkdir -p /usr/local/tomcat/webapps/svn 1.3创建版本库 svnadmin create /u

Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法

首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion 2,创建版本库 svnadmin create /home/myrepos    //这里的文件目录自己随便设置 3,配置svnserve 上述版本库/home/myrepos建立后在文件夹下会生成conf文件夹,进入/home/myrepos/conf下面会有下面3个文件 authz passwd 

SVN跨服务器自动更新

环境介绍: 1.测试服务器 带SVN客户端程序的linux服务器,web环境:php+mysql+nginx,版本库的各工作拷贝置于web根目录. 2.SVN服务端 带SVN服务端程序windows服务器 . 我们的目标:SVN版本库提交,测试服务器中的工作拷贝能自动update. 基本思路:默认情况下,版本库的hooks子目录中包含各种版本库钩子模板.如下图: 钩子是通过版本库事件触发,例如新版本的创建或一个未版本化属性的修改.一些钩子(“pre hooks”)在事件发生前运行,可以用来报告发

Linux下搭建SVN服务器及自动更新项目文件到web发布目录(www)

一.linux服务器端配置 [[email protected] ~]# rpm -qa | grep sub subversion-libs-1.7.14-10.el7.x86_64 subversion-1.7.14-10.el7.x86_64 [[email protected] ~]# ps -ef | grep svn root      21019  20613  0 21:57 pts/0    00:00:00 grep --color=auto svn [[email prot

eclipes创建一个web项目web.xml不能自动更新的原因(web.xml和@WebServlet的作用)

在eclipse中创建一个Web项目的时候,虽然有web.xml生成,但是再添加Servlet类文件的时候总是看不见web.xml的更新,所以异常的郁闷!上网查了查,原来我们在创建Web项目的时候,会弹出一个对话框,“Dynamic web module version”这个选项默认成了3.0,按照老规范,应该是在eclipse的WebContent \ WEB-INF \ 目录下创建web.xml的.而新规范是可以不用web.xml的,如tomcat 7.0就支持新规范,这样相关的servle

Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法(转载)

文章来源:http://www.cnblogs.com/xfiver/archive/2010/07/07/1772764.html 1.  IOException parsing XML document from ServletContext resource [/WEB-INF/classes/beans.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resour

将Eclipse项目自动部署到Tomcat的webapps目录下

在eclipse中新建的Dynamic Web Project.写好代码后,选择Run on Server(当然Server配置为Tomcat),但是运行后我们发下在Tomcat的安装目录下并没有出现我们所建立的工程名字.很明显,项目并没有自动部署到Tomcat的Webapps中.不信我们等eclipse中的tomcat启动以后.在eclipse内置的浏览器中输入http://localhost:8080/webDemo/login.jsp(其中webDemo为工程名字).可以正常打开.但是我们

svn提交后利用hooks自动更新web服务器

#!/bin/shREPOS="$1″#版本库REV="$2″#版本号#export LC_ALL=C#export LANG=zh_CN.UTF-8export LANG=en_US.UTF-8#字符集WEB=/data/www/default/test#web站点物理地址SVN=/usr/bin/svn#svn命令地址LOG_PATH=/home/svn/svn.log#日志文件地址echo `date "+%Y-%m-%d %H:%M:%S"` >>