使用TortoiseSVN的客戶端鈎子腳本觸發Jenkins構建


我們項目在開發過程中使用了Jenkins構建Windows版本,為了通過自動觸發使構建的版本保持最新,可以采用的方法如下:

  • Jenkins Poll SCM:設置Jenkins定時檢查變更,在SVN版本號有變更的情況下執行構建;
  • Jenkins Remote Trigger + SVN Post Commit Hook:配置SVN倉庫的Post Commit Hook,在提交完成后觸發Jenkins遠程構建;

顯然,第二種方法更可取一些。但是在公司內配置SVN Server Hooks需要申請權限和訪問規則。

幸好,我們使用的TortoiseSVN支持客戶端鈎子腳本(Hook Scripts)。

 

客戶端鈎子腳本的類型和參數

TortoiseSVN的客戶端鈎子腳本支持以下幾種類型:

tortoisesvn-hook-script-types

我們需要的是Post-commit類型的腳本。在腳本執行的時候,TortoiseSVN會傳遞的參數信息如下:

tortoisesvn-post-commit-hook-params

這些參數的意義如下:

tortoisesvn-post-commit-hook-param-meanings

其中,PATH指向的文件包含了本次提交影響到的所有文件的路徑,ERROR指向的文件包含了本次提交的錯誤信息。這兩個參數是我們需要關心的。

Post-commit腳本

我們使用的腳本如下:

HOOKS/POST_COMMIT_HOOK.BAT

Python腳本的封裝,內容如下:

 

HOOKS/POST_COMMIT_HOOK.PY

實際的鈎子腳本,內容如下:

鈎子腳本的主要工作如下:

1. 判斷本次提交是否出錯,如果有錯誤,說明提交未成功,退出腳本;
2. 遍歷本次提交影響到的所有文件,如果包括源代碼文件(‘.h’, ‘.cpp’, ‘.cc’, ‘.c’),或者項目配置文件(‘.vcxproj’, ‘.vcxproj.filters’),則說明需要觸發構建,否則退出腳本;
3. 調用jenkins_job_url觸發構建。

JENKINS JOB URL

鈎子腳本中jenkins_job_url的定義如下:

其中的變量含義分別如下:

USER/USER_API_TOKEN

Jenkins用戶名和對應的API TOKEN。

jenkins-user-api-token

JENKINS_URL

Jenkins的訪問路徑。

JOB_NAME

項目名稱。

TOKEN_NAME

在項目的遠程構建中設置的身份驗證,需要啟用觸發遠程構建的選項。

jenkins-job-token-name

設置鈎子腳本

打開TortoiseSVN設置界面,選擇鈎子腳本:

tortoisesvn-hook-script

點擊增加,打開設置鈎子腳本界面:

tortoisesvn-hook-script-setup

進行以下設置:

  • 設置鈎子類型為提交之后;
  • 設置工作副本路徑為trunk目錄;
  • 設置執行的命令行為post_commit_hook.bat;
  • 選中運行時隱藏腳本和總是執行這些腳本選項,不要選中等待腳本運行結束選項。

驗證構建

在提交版本后,檢查Jenkins中是否觸發了構建。如果成功觸發了構建,控制台輸出應該如下:

jenkins-console-log

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM