利用svn钩子实现自动导出部署WEB应用

应用场景:
开发团队3-5人,用svn做版本控制,测试环境和数据库在测试服务器上,一般情况下先在本地测试完成,然后传到服务器测试,这样显得有点麻烦,集中规定将代码上传到服务器进行测试,这里就涉及到一个应用自动部署的问题,有两种思路,一种服务器写一个crontab,编写一个shell脚本,实时监听服务器,将最新版本检出到web根目录;第二种思路,利用svn的钩子实现版本的实时导出。第一种方法比较简单,直接写一个导出版本的shell脚本即可,第二种方法其实使用起来更加便利。
首先简单介绍一下svn hooks,通常在创建svn版本库之后我们会在版本库的文件目录下找到一个叫做hooks的目录,这里存放的就是svn所谓的钩子了,他的主要用途在于在subversion执行一个操作时,会触发相应的钩子程序(前提当然是钩子存在),钩子程序就是一些shell脚本,执行相应的操作。

  1. ll hooks

如下图,列出的是一些钩子的模板案例,将后面的tmpl后缀名去掉,就变成了相应的钩子程序了。
1

post-commit
在提交完成,成功创建版本之后执行该钩子,提交已经完成,不可更改,因此本脚本的返回值被忽略。

post-lock
对文件进行加锁操作之后执行该脚本

post-revprop-change
在修改 revision 属性之后,执行该脚本。因为修改稿已经完成,不可更改,因此本脚本的返回值被忽略(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改)

post-unlock
对文件进行解锁操作之后执行该脚本

pre-commit
在 Subversion transaction 完毕之后,在提交之前,执行该脚本

pre-lock
对文件进行加锁操作之前执行该脚本

pre-revprop-change
在修改 revision 属性之前,执行该脚本

pre-unlock
对文件进行解锁操作之前执行该脚本

start-commit
在客户端还没有向服务器提交数据之前,即还没有建立 Subversion transaction(缩写为 txn) 之前,执行执行该脚本

具体到我们的应用场景,我们要实现一个同步的测试服务器,我们只需要在一个用户执行完毕一个commit提交操作之后,让钩子程序去自动更新测试服务器的文件即可
。通过这个思路,我们需要作的就是建立一个post-commit的钩子。

  1. #!/bin/sh
  2. cd /usr/local/www/coolphp
  3. SVN=/usr/local/bin/svn
  4. export LANG=en_US.UTF-8
  5. $SVN update --username kokko --password 111111 --no-auth-cache

注意相关权限的设置…

原文:http://www.kokkowon.com/archives/987

猜你喜欢

转载自kokko.iteye.com/blog/1130168