linux下svn服务器安装与使用钩子自动部署web代码

linux下svn服务器安装与使用钩子自动部署web代码

这里使用的是ubuntu系统

svn服务器在linux下名叫 subversion,我们首先要安装svn服务器,输入以下命令安装:

apt install subversion

安装好svn服务器后,选定一个目录作为svn仓库(这里示例使用的是多仓库模式)

因为我有使用宝塔,所以我选了创建  /www/svn 目录,以后创建新仓库将会在 /www/svn 目录下创建

cd  /www/svn          #进入svn目录

svnadmin create testsvn     #创建一个名叫testsvn的仓库,也可以使用 svnadmin create /www/svn/testsvn  直接指定目录创建

在 /www/svn 目录下可以创建多个svn仓库

例如执行  svnadmin create svn1   和  svnadmin create svn2  将会在 /www/svn目录下生成  svn1 和 svn2 两个仓库目录

创建 testsvn 仓库后可以看到该目录的结构,如下图:

仓库目录结构图

 

svn服务器会把提交的代码压缩保存,所以这里是不会直接显示提交的源代码目录结构的。

重点注意以下文件目录(如果你想了解更多svn服务器目录结构的内容请自行查询)

---   conf  是配置文件目录

---   hooks 是钩子脚本目录


配置svn仓库

每个svn仓库都有独立的文件配置,我们先 cd   /www/svn/testsvn/conf   进入配置目录

conf配置目录结构

修改svnserve.conf 文件的内容  (怎么使用 vim  命令编辑文件就不用我教了吧)

找到 anon-access  去掉前面的注释 ,修改为anon-access = none   (这是禁止匿名访问)

找到 auth-access  去掉前面的注释,修改为 auth-access = write      (这是赋予登录用户读写权限)

#指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。可选。
realm=testsvn

去掉 password-db = passwd  和  authz-db = authz 前面的注释 (必须)。去掉注释后才会使用目录下的authz 和 passwd 文件配置用户权限

修改结果

修改结果

password-db = passwd  也可以改为 password-db = ../xxx/gggg/passwd ,这样是自定义配置文件的位置

 

设置用户密码

编辑 /www/svn/testsvn/conf 目录下的 passwd 文件

[users]
# harry = harryssecret
# sally = sallyssecret
yinbug = 123456

这样就设置了一个svn账户和密码了

设置用户组

编辑 /www/svn/testsvn/conf 目录下的 authz 文件

编辑结果

这里是指定用户属于哪个用户组,拥有哪个仓库根目录的读写权限,  *=  代表默认没读写权限 ,更多配置方式自行百度吧

 

在配置好用户权限后已经可以启动svn服务器了 (默认svn端口3690)

svnserve -d -r /www/svn     #启动该目录下的所有仓库

 使用 ps -ef|grep svn  可以显示服务是否启动

启动信息

这样就说明服务已经启动了,其中红方框括起来的是进程号(pid)

可以使用 kill -9 10011  命令 结束服务,其中 -9 是发出退出的进程信息   10011 是进程号(pid)

 

开机自启

编辑 /etc/rc.local  在 exit 0 前一行添加内容:svnserver -d -r /www/svn

 

有关开机启动的参考的文章:

Linux下SVN安装、配置及使用

 

配置post-commit 提交部署钩子

为了每次提交svn后可以自动部署代码到web服务器,我们要编写钩子脚本,先 cd   /www/svn/testsvn/hooks  进入钩子目录

cp post-commit.tmpl post-commit    #复制提交成功的钩子模板文件为 post-commit 文件

因为手动创建post-commit 文件可能最后有权限问题,所以建议直接 使用 cp 命令

编辑post-commit 文件的内容

#!/bin/sh

REPOS="$1"
REV="$2"
TXN_NAME="$3"

export LANG=en_US.UTF-8
/usr/bin/svn update /www/wwwroot/lcbug.com/testsvn  --username yinbug --password 654321 --no-auth-cache --non-interactive
exit 0

重点是倒数第二行,执行 svn 的更新命令,更新 /www/wwwroot/lcbug.com/testsvn 中的文件,后面是一些参数指定使用的用户信息

/usr/bin/svn 是svn 的安装目录,除非你有更改,默认就是这个,可以使用whereis svn 查看安装目录。(相当于就是svn update xxxxx 命令)

在执行钩子前,必须先保证 需要部署的web 目录已经手动 svn 检出过一次。(即存在 .svn 隐藏目录) 

cd  /www/wwwroot/lcbug.com/   #进入需要部署的web目录执行以下检出命令

svn co svn://localhost/testsvn --username yinbug --password 123456
#或者
svn checkout svn://localhost/testsvn --username yinbug --password 123456

检出后会多一个testsvn 目录,也是相当于一个本地仓库,此时源代码目录已经显示出来

好了,到这里部署已经完成了,可以进行使用测试了。如果在使用中出现问题,尤其是 (post-commit hook failed (exit code 255) with no output)那就是权限错误了

svn 默认会使用 httpd 或者  www-data 之类的账户运行钩子脚本,你需要解决脚本运行的权限问题(很少遇到这个问题,参考下面的文章)

可以尝试为post-commit 添加执行权限:chmod +x post-commit
可以尝试更改所属用户: chown www:www post-commit             (这里www用户 和 www用户组仅供参考)

也可以尝试在post-commit  中添加以下命令更改部署的web目录权限:

chown -R www:www /www/wwwroot/lcbug.com  # 修改部署目录的所属用户组
#或者
chmod -R 755 /www/wwwroot/lcbug.com   # 修改部署目录的文件读写权限

# 以上仅供参考

 

上述post-commit 文件内容为简化版命令,详细可以参考以下文章:

SVN配置 - 钩子(Hooks)提交后自动同步

Linux下SVN服务器自动更新文件到Web目录的方法

利用SVN的POST-COMMIT钩子自动部署代码

Linux下安装SVN服务端小白教程

Linux上手动搭建svn服务器

最全!Linux服务器下安装SVN,并添加SVN项目,自动更新项目文件到web目录

svn配置常见问题

post-commit hook failed (exit code 255) with no output 解决方案

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值