安静
PHP技术博客

140929 CentosSVN提交文件自动更新到nginx的WEB目录

svn 自带了hooks 机制,能检测 提交,删除之类操作,利用这些操作我们可以做很多事,比如自动发布web站 ,自动更新redmine记录等等。

环境介绍:

1)系统centos 6.3 64位。

2)服务器端SVN版本 1.6.11。

3)WEB服务器nginx版本 0.8.46。

4)nginx的WEB目录:/data0/htdocs/wwwroot

5)svn仓库中心目录:/opt/svn/

配置步骤如下:

1、在svn仓库中心下创建一个创建wwwroot,shell命令如下:

1 svnadmin create /opt/svn/wwwroot/

2、配置wwwroot创建,shell命令如下:

1 cd /opt/svn/wwwroot/conf/
2 vim svnserve.conf

找到以下的内容,并在行首注释符号#删掉。

1 [general]
2 anon-access = none
3 auth-access = write
4 password-db = passwd
5 authz-db = authz

为 svntest 项目增加svn用户,并且赋予权限值:

1 vi authz
2 </pre?
3 在文件中添加如下代码:
4 <pre class="brush: php; gutter: true; first-line: 1; highlight: []; html-script: false">
5 [wwwroot:/]
6 wwwroot = rw

代码的意思是:为 wwwroot 项目添加一个wwwroot 的用户,并且,这个用户对于 wwwroot 项目拥有读写权限。

给用户分配密码,执行如下命令:

1 vi passwd

输入如下内容:

1 wwwroot = 123456

配置好SVN之后,请查看你的 svn 是否启动,如果没有启动,用以下命令启动:

1 svnserve -d -r /opt/svn/

3、配置项目仓库的钩子配置。

可以把钩子看成是WEB项目与SVN项目仓库之间的一个关联。通过向svn项目仓库提交脚本代码,利用钩子shell脚本可以自动向web项目中将脚本文件更新过去。

进入SVN项目仓库钩子所在目录,shell命令:

1 cd /opt/svn/wwwroot/hooks/

然后执行如下复制命令:

1 cp post-commit.tmpl post-commit

然后编辑post-commitshell脚本,shell命令如下:

1 vi post-commit

将里面的所有代码注释掉,然后输入如下代码:

1 cd /data0/htdocs/wwwroot
2 /usr/bin/svn cleanup
3 /usr/bin/svn up /data0/htdocs/wwwroot/  --username "wwwroot" --password "123456"

这个地方需要注意,我们先进入到wwwroot目录下进行SVN清理(cleanup),消除一些隐患。然后再执行将 svn wwwroot项目创建里面的代码同步更新到web项目目录/data0/htdocs/wwwroot/中去。这里的账号wwwroot和密码123456是我们创建SVN wwwroot项目仓库的时候指定的。

这个时候,我们去提交一个文件到svn,这时会发现在/data0/htdocs/wwwroot/目录下同步更新过来了。

如果没有反应,会有两个地方可能出错:

1)配置文件与路径写得不对,可以直接通过手工方式去执行post-commit看看有没有报错。

2)权限不对。即/data0/htdocs/wwwroot权限是否足以满足脚本的读写。

这种方式在如今的项目开发中非常的常见,在过去的几年中我在开发中遇到的也基本上是这种方式。所以,非常有必要掌握它,以备不时之需。

赞(0) 打赏
未经允许不得转载:AJ's Blog » 140929 CentosSVN提交文件自动更新到nginx的WEB目录
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏