windows下svn post-commit的实现

前言:json

       好的!在结束了上一博客教程的Subversion安装以后。咱们开始了下一项工做,windows版本下 svn post-commit的实现。说实话,这方面的知识网上的知识并非不少~~~~~~~。windows

       >>>post-commit是干什么的?服务器

       当用户实现commit操做以后,就会执行相应的post-commit文件里的内容。实现commit后的触发器效果。app

 

       >>>那么这个  post-commit.bat 文件应该放在哪里呐?curl

        嗯嗯,这个问题主要取决于你安装VisualSVN Server时选择安装Repository的目录位置。这里就假如你选择了默认安装位置 C:\Repository 下吧。svn

        当你在VIsualSVN Server下建立了相应的repository后,假如你建立的仓库名字为 test。那么在你的 C:\Repository 下就会生成相应的 test 仓库。工具

        好的,如今就把你的 post-commit.bat 文件放到 C:\Repository\test\hooks 目录下吧。post

 

================================================================================测试

好的。下面就须要实现相应的 post-commit.bat 文件的功能啦。固然,每一个人的需求时不同的啦。我这里是提取出相应的svn数据信息,而后经过curl工具ui

将相应的数据post到对应的url。

下面是我编写的post-commit.bat, 你们能够做为参考(固然啦~。~,这里你还得熟悉熟悉windows的批处理。。。。。):

@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% >> %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 "judge from %CHANGE%, type is %TYPE%" >> %LOGFILE% :: 按应用需求,在不一样的类型里面填入easyops的svn钩子url,若是不区分分支,则在*)里面填

if "%TYPE%"=="trunk" goto label_trunk if "%TYPE%"=="tags"  goto label_tag if "%TYPE%"=="branchs" (goto label_branchs) else goto label_all :label_trunk
SET url="http://r.easyops.cn/hook/subversion/org/1888/app/5ac9dd6f01ca7/pipeline/4dc5522c75d5d5e68e5b0d89925c3802"
goto exit_type :label_tags
SET url=""
::url='http://admin.easyops.local/hook/subversion/org/1888/app/598beb9fbcc06/pipeline/85df75da575635744a1f2feefa913a61'
goto exit_type :label_branchs
SET url=""
goto exit_type :label_all
SET url="" && goto exit_type :exit_type

if "%url%"=="" (echo "not found trigger url in %TYPE% type, exit" >> %LOGFILE% && exit 0) else echo "will trigger %url%"  >> %LOGFILE% ::将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:\=\\% ::generate_post_data
set post_data="{\"repos\": \"%REPOS%\",\"rev\":\"%REV%\",\"txn_name\":\"%TXN_NAME%\",\"uuid\":\"%UUID%\",\"type\":\"%TYPE%\",\"tag\":\"%TAG%\",\"author\":\"%AUTHOR%\",\"date\":\"%DATE%\"}"


::设置curl文件的位置
set curl=C:\curl.exe %curl% -i -X POST -H "Content-Type: application/json" --data %post_data% %url%

 

 

 

将相应 post-commit.bat 文件放到相应的仓库hooks目录下

=============================================================================

下面就是测试 post-commit 的实现效果了。。。。

(1)首先checkout 在VisaulSVN服务器下建立的 test 仓库 到本身想要的目录下。(点击鼠标右键就能够看到相应的 svn checkout操做)

(2)checkout结束以后,在copy下来的test仓库里面添加或者更新相应的文件或目录。

(3)完成上面的操做后,鼠标右键发现svn commit 操做,而后点击实现。

 

固然这里会出现各类各样的bug。仍是须要去解决的。

相关文章
相关标签/搜索