前言: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。仍是須要去解決的。