本文主要通过SVN把文件上传至服务器实现一键部署:
首先,需要安装SVN服务器。服务器采用ubuntu,而安装SVN服务器有2种方式:
1.独立服务器 (例如:svn://88181.com/88181);
2.借助apache(例如:http://svn.88181.com/88181)。
两种方式各有利弊,使用独立服务器的方式更加容易一下,在此就使用第一种方式部署。
通过7步部署SVN服务器:
1、首先需要安装Subversion软件:
sudo apt-get install subversion
2、创建仓库
svnadmin create /home/administrator/svn
/home/administrator/svn 为所创建仓库的路径,理论上可以是任何目录
3、修改配置文件 /home/administrator/svn/conf/svnserve.conf
[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access = none
#认证用户的权限,可以是read,write,none,默认为write
auth-access = write
#密码数据库的路径,去掉前面的#
password-db = passwd
注意:所有的行都必须顶格,否则报错。 建议:为了防止不必要的错误,建议你直接用我上面的内容覆盖掉文件原来的内容.
4、修改配置文件passwd
[users]
admin = admin
注意:
◆一定要去掉[users]前面的#,否则svn只能以匿名用户登录,客户端不会出现登录窗口,除非你的anon不为none,否则将返回一个错误。
◆这里的密码都是没有加密的,我按照一些教程所说的用htpasswd生成的密码无法使用。
◆格式为【用户名】=【密码】,这里即为客户端采用该用户名和密码登录,及用户名为admin,密码也为admin。
5、停止Subversion服务器:
killall svnserve
6、启动Subversion服务器 对于单个代码仓库,启动命令:
svnserve -d -r /home/administrator/svn
其中-d表示在后台运行,-r指定服务器的根目录,这样访问服务器时就可以直接 用svn://服务器ip来访问了。
7、扩展
如果服务器有多ip的话–listen-host来指定监听 的ip地址. www.linuxidc.com我们可以在Subversion客户端中通过svn://10.19.3.103来访问Subversion服务器 对于多个代码仓库,我们在启动时也可以用-r选项来指定服务器根目录,但访问时 需要写上每个仓库相对于svn根目录的相对路径. 比如,我们有两个代码仓库/var/vss/repo1 和/var/vss/repo2,我们用 svnserve -d -r /var/vss –listen-host 10.19.3.103来启动,那么在客户端访 问时可以用svn://10.19.3.103/repo1和svn: //10.19.3.103/repo2来分别访问两个项目。
在部署完成SVN服务器之后,接下来需要做的就是修改SVN的钩子(hooks)之一——post-commit,该钩子其实就是一个shell脚本,用于当上传完毕之后执行的。注意,此shell脚本为来保证安全,不能使用环境变量。
执行以下命令:
#cd /home/administrator/svn/hooks
#cp post-commit.tmpl post-commit #复制原来的示例文件,并且改名为post-commit
#vim post-commit
然后修改post-commit文件的内容如下:
exec >/tmp/svn-up.out 2>&1 #将调试信息输出至/tmp/svn-up.out文件中,这对于调试很重要echo "$@" #可以看到svn调用该shell脚本时所传递进来的所有的参数
export LANG="zh_CN.UTF-8" #设置传给SVN服务器中可以含有中文
svn export --username admin --password admin svn://10.23.0.119/repo1 /home/administrator/ProgramFiles/apache-tomcat-6.0.28/webapps --force #使用svn export命令将文件仓库导出至文件夹下,也可以使用svn update命令,该命令貌似是只导出更新的一部分,这我没有尝试。
cd /home/administrator/ProgramFiles/apache-tomcat-6.0.28/webapps
#对每个war文件建立相应的文件夹并解压
for file in *.war
do
dirname=${file%%.*} #获取相应的war文件的文件夹名,如如果上传的testSVN.war文件,则dirname为testSVN;
echo $dirname
echo $file
rm -rf $dirname
mkdir $dirname
cp $file $dirname
cd $dirname
/home/administrator/ProgramFiles/jdk1.6.0_31/bin/jar -xf $file #在该文件夹中将war文件解压出来;
rm -rf $file
cd ..
done
至此,该war文件一旦通过svn客户端,使用用户名admin,密码admin将war文件上传至svn服务器时,就会相应的部署到tomcat服务器下。