如果你的svn的服务端是安装在window服务器上的,则可以在Repositories对应的项目中右键选择Properties
然后选择第二个选项卡Hooks
双击Post-commit hook
然后在输入框中输入如下的代码
@echo on
:: 将该文件放置到svn repository的hooks目录,如D:\subversion\test\hooks
:: 1. 名字一定要是post_commit
:: 2. 修改case里面的curl为easyops应用流水线的svn钩子
SET REPOS=%1
SET LOGFILE=%REPOS%\post-commit.log
SET REV=%2
SET TXN_NAME=%3
::UUID
for /f "delims=" %%t in ('svnlook uuid %REPOS%') do set UUID=%%t
::AUTHOR
for /f "delims=" %%t in ('svnlook author %REPOS% -r %REV%') do set AUTHOR=%%t
::LOG
for /f "delims=" %%t in ('svnlook log %REPOS% -r %REV%') do set LOG=%%t
::DATE
for /f "delims=" %%t in ('svnlook date %REPOS% -r %REV%') do set DATE=%%t
::echo %REPOS% %REV% %TXN_NAME% %UUID% %LOG% >> %LOGFILE%
::==================================================
::CHANGE
for /f "delims=" %%i in ('svnlook changed %REPOS% -r %REV%') do set CHANGE=%%i
::TYPE
for /f "tokens=2 delims= " %%t in ("%CHANGE%") do for /f "tokens=1 delims=/" %%c in ("%%t") do set TYPE=%%c
::TAG
for /f "tokens=1 delims= " %%t in ("%CHANGE%") do set TAG=%%t
::======================================================
echo "path:%REPOS% version:%REV% txnname:%TXN_NAME% uuid:%UUID% comment:%LOG% change:%CHANGE% type:%TYPE% tag:%TAG%" >> %LOGFILE%
:: 按应用需求,在不同的类型里面填入easyops的svn钩子url,如果不区分分支,则在*)里面填
::将win下路径的 \ 替换为 \\ 。不然会出现格式问题
set REPOS=%REPOS:\=\\%
set REV=%REV:\=\\%
set TXN_NAME=%TXN_NAME:\=\\%
set UUID=%UUID:\=\\%
set TAG=%TAG:\=\\%
set AUTHOR=%AUTHOR:\=\\%
set DATE=%DATE:\=\\%
set TYPE=%TYPE:\=\\%
set LOG=%LOG:\r=_%
set LOG=%LOG:/r=_%
set LOG=%LOG:\n=_%
set LOG=%LOG:/n=_%
::generate_post_data
set post_data="{\"token\": \"yourservicesvntoken\",\"repos\": \"%REPOS%\",\"info\":\"%LOG%\",\"txn_name\":\"%TXN_NAME%\",\"uuid\":\"%UUID%\",\"type\":\"%TYPE%\",\"tag\":\"%TAG%\",\"author\":\"%AUTHOR%\",\"date\":\"%DATE%\"}"
echo "begin post info" >> %LOGFILE%
curl -H "Content-Type: application/json" -X POST -d %post_data% "http://www.yourPasteSpider.com/api/Code/svncommit"
echo "posted!" >> %LOGFILE%
::设置curl文件的位置
::set curl=C:\curl.exe
::%curl% -i -X POST -H "Content-Type: application/json" --data %post_data% %url%
上述的代码中注意替换 yourservicesvntoken和http://www.yourPasteSpider.com替换成你自己的。
如果你的svn是安装在Linux中的,则可以参照如下的进行:
本次环境 centos7 yum cat vim等
1.安装svn服务端
yum install subversion
2.创建预用文件夹 /home/svn/project /home/svn/project/project1 /home/svn/project/project2,主目录为/home/svn/project,至于后面的project1 project2为仓库项目,后续可以再追加
mkdir -p /home/svn/project/project1
mkdir -p /home/svn/project/project2
3.创建仓储项目
svnadmin create /home/svn/project/project1
svnadmin create /home/svn/project/project2
4.配置账号,先把账号文件从/home/svn/project/project1/conf/passwd复制到/home/svn/project/passwd
cp /home/svn/project/project1/conf/passwd /home/svn/project/passwd
5.追加账号,也就是修改/home/svn/project/passwd的文件内容。比如添加账号user1密码123456 账号user2密码123456
vim /home/svn/project/passwd
按照里面的案例添加账号密码,中间用=号隔开,一组一行。录入退出保存(i->输入->Esc->ZZ)
user1=123456
user2=123456
6.配置权限,也就是修改/home/svn/projcet/authz的文件内容。说明如下:
[groups]#分组
# harry_and_sally = harry,sally#harry_and_sally为分组名称 harry,sally为2个用户名
# harry_sally_and_joe = harry,sally,&joe
# [/foo/bar]#相对路径下的权限
# harry = rw
# &joe = r
# * =#留空表示其他账号无任何权限
# [repository:/baz/fuz]#仓库下的某一个文件夹?
# @harry_and_sally = rw#rw表示可读可改
# * = r#r表示读取权限
比如我这一次编写内容为:表示用户user1有所有仓储的读取权限,user2只有读取权限
[/]
user1 = rw
user2 = r
修改完成后退出保存(i->输入->Esc->ZZ)
7.修改服务配置内容 /home/svn/project/project1/conf/svnserve.conf打开如下配置信息
anon-access = none #匿名用户不可读 read匿名用户可以读取
auth-access = write #授权用户可写
password-db = ../../passwd #使用哪个文件作为账号文件
authz-db = ../../authz #使用哪个文件作为权限文件
realm = /home/svn/project # 认证空间名,版本库所在目录
上述中,由于我们要调用/home/svn/project/passwd文件和/home/svn/project/authz文件,所以路径修改了,调用上一层,上一层的passwd和authz文件。
8.把7中修改的svnserve.conf文件复制到/home/svn/project/project2/conf/svnserve.conf,后续创建多仓库的话这个文件都要复制到对应的仓库下面去。
cp /home/svn/project/project1/conf/snvserve.conf /home/svn/project/project2/conf/snvserve.conf
9.修改hooks文件,用于提交后推送消息给PasteSpider告知有新的版本提交了。复制/home/svn/project/project1/hooks/post-commit.tmpl为/home/svn/project/project1/hooks/post-commit
cp /home/svn/project/project1/hooks/post-commit.tmpl /home/svn/project/project1/hooks/post-commit
编辑修改/home/svn/project/project1/hooks/post-commit,提交后的内容推送到PasteSpider的接收地址中:比如我的PasteSpider的对外地址为http://192.168.2.39:18888
#REPOS="$1"
#REV="$2"
export LANG=zh_CN
MESSAGE=$(svnlook log -r $2 $1)
curl -d "token=your_token&repos=$1&version=$2&info=$3&info=$MESSAGE" "http://www.yourPasteSpider.com/api/spider/Code/svncommit"
#set post_data="{\"token\": \"yourservicesvntoken\",\"repos\": \"$1\",\"info\":\"$MESSAGE\",\"txn_name\":\"\",\"uuid\":\"\",\"type\":\"\",\"tag\":\"\",\"author\":\"\",\"date\":\"\"}"
#curl -H "Content-Type: application/json" -X POST -d %post_data% "http://www.yourPasteSpider.com/api/Code/svncommit"
上面注意修改自己的token内容,这个在PasteSpider的后台的源代码仓库管理中有设置接口密钥。然后把/home/svn/project/project1/hooks/post-commit复制一份给/home/svn/project/project2/hooks/post-commit,如果他们的token不一样,则需要修改下。
上面的命令注意替换对应的字符
your_token表示你在PasteSpider中svn配置的验证密钥
http://www.yourPasteSpider.com你的PasteSpider的访问域名地址
然后是给post-commit文件执行权限,2个项目都要
chmod 755 /home/svn/project/project1/hooks/post-commit
chmod 755 /home/svn/project/project2/hooks/post-commit
10.启动svn服务,由于我用了自定义端口,默认端口3690
svnserve -d -r /home/svn/project --listen-port 12100
11.如果启动后要停止咋办?查找进程命令
ps -ef | grep svnserve
找到后面有 svnserve -d -r字眼的那一行,看下第二列数字是多少比如我的11230,结束这个进程
kill -9 11230
这样svnserve服务就停止了。
12.服务运行后,比如我可在客户端上使用svn://192.168.2.39:12100/project1链接上project1的仓库管理,进行提交获取checkout等。
ps:对应仓库链接后,进行一个提交,看看PasteSpider后台是否接收到。默认约束提交的备注中update开头,则会触发对应的镜像打包升级服务。如果有配置的话。
还是用客户端方便,就点击几下就可以了!