利用svn钩子hooks/post-commit实现代码远程自动部署

为什么写下这篇文章

首先,关于我为什么要使用svn而不是git或者ftp,这篇关于svn的使用文章已经有详细的解释
为什么我要实现远程自动部署呢?
因为,我的svn serverweb server不在同一个主机上,每次修改了代码执行了svn commit都要用xshell连接上服务器执行svn up操作,很麻烦,所以就想搞一个远程自动部署

同服务器自动部署

同服务器说明

svn目录:/var/www/svn/test_yiranzai_cn(A服务器)
web project目录:/var/www/html/test_yiranzai_cn(A服务器)

配置自动部署

新建post-commit

1
2
3
4
5
6
7
8
9
10
11
$ cd /var/www/svn/test_yiranzai_cn/hooks/
$ vim post-commit
#!/bin/bash
REPOS="$1"
REV="$2"
export LANG=en_US.UTF-8
echo "Code Deployed at `date "+%Y-%m-%d %H:%M"`" >> /var/www/svn/test_yiranzai_cn/hooks/deploy_log
# 如果你的项目还没有checkout
svn up --username ****** --password ****** /var/www/html/test_yiranzai_cn
# 如果你已经执行过svn checkout,保存了帐号和密码
svn up /var/www/html/test_yiranzai_cn

赋予权限

1
$ chmod +x post-commit

测试

测试的话,我这里是在本地修改版本库,点commit,然后再看web project上的数据是否更新来测试。

远程服务器自动部署

远程服务器说明

svn目录:/var/www/svn/test_yiranzai_cn(A服务器)
web project目录:/var/www/html/test_yiranzai_cn(B服务器)
web project for shell:/var/www/html/shell_yiranzai_cn(B服务器)
看完上面的同服务器部署,你是否想到远程服务器部署的方法?
这里我的想法是,在B服务器上另外部署一个web project for shell,利用世界上最好的语言PHP去执行svn up操作,然后在post-commit中配置curl访问这个web project for shell
OK,说干就干

新建用于执行shell命令的web项目

这里怎么创建web项目我就不多说了,配置了一个shell.yiranzai.cn指向该web项目

创建执行shell命令的文件

1
2
3
4
5
6
7
8
$ cd /var/www/html/shell_yiranzai_cn/
$ vim test_svn_up.php
<?php
#先执行cd操作
#再执行svn up操作
#注意一定要放在同一个exec()中
exec("cd /var/www/html/test_yiranzai_cn/;svn up");
?>

配置post-commit

新建post-commit

1
2
3
4
5
6
7
8
$ cd /var/www/svn/test_yiranzai_cn/hooks/
$ vim post-commit
#!/bin/bash
REPOS="$1"
REV="$2"
export LANG=en_US.UTF-8
echo "Code Deployed at `date "+%Y-%m-%d %H:%M"`" >> /var/www/svn/test_yiranzai_cn/hooks/deploy_log
curl shell.yiranzai.cn/shop_svn_up.php

赋予权限

1
$ chmod +x post-commit

测试

测试的话,我这里是在本地修改版本库,点commit,然后再看web project上的数据是否更新来测试

—End—

文章不错,你都不请我喝杯茶,就是说你呀!
0%
upyun