2017-04-07 141 views
2

最近我已經開始編寫CI項目了,它必須構建SCM commit(Git/SVN)上的項目。我嘗試遠程使用構建觸發器,當我提交代碼併成功構建應用程序時,它觸發作業。Jenkins觸發一個基於多個項目提交的構建

現在我在一個存儲庫中有多個項目,所以根據我的提交,它必須在存儲庫中找到相應的項目並開始執行特定的作業。

Jenkins有沒有辦法做到這一點?

代碼的post-commit-鉤jenkins.vbs文件

Set args = WScript.Arguments 
JobName = args.Item(0) 
Token = args.Item(1) 

' URL to open 
sUrl = "http://builduser:[email protected]:8080/buildByToken/build?job=" + JobName + "&token=" + Token 

' POST Request to send. 
WScript.Echo "sUrl: " + sUrl 
sRequest = "" 

HTTPPost sUrl, sRequest 

Function HTTPPost(sUrl, sRequest) 
    set oHTTP = CreateObject("Microsoft.XMLHTTP") 
    oHTTP.open "POST", sUrl,false 
    oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    oHTTP.setRequestHeader "Content-Length", Len(sRequest) 
    oHTTP.send sRequest 
    HTTPPost = oHTTP.responseText 
End Function 

代碼後commit.bat文件

SET CSCRIPT=%windir%\system32\cscript.exe 
SET VBSCRIPT=E:\Repositories\CICD\hooks\post-commit-hook-jenkins.vbs 

"%CSCRIPT%" "%VBSCRIPT%" "JobName" "AuthenticationToken" 

回答

2

如果

  • 在「源代碼Ma」下設置項目的SVN/git位置nagment投票SCM構建觸發器‘部分

‘中’,」作業配置

  • ,然後選擇的部分’,那麼它應該工作,只要你想漂亮多了。

    事實上,你問這個問題可能意味着你正在從構建腳本做源代碼簽出,對吧?避免這個,讓Jenkins處理svn checkout/git clone。

    或者你只是想避免輪詢,這個問題是關於如何從SVN後提交鉤子觸發不同的項目,取決於你提交的SVN倉庫中的位置?在這種情況下,你需要編寫一個更復雜的鉤子腳本來分析提交所影響的路徑,並根據這個腳本觸發正確的Jenkins作業。

    編輯

    在你的後commit.bat文件,你應該傳遞的信息庫和版本號提交的,而不是作業名稱,因爲你還不知道這作業觸發。 Subversion通過存儲庫和修訂版作爲第一個和第二個參數。

    SET CSCRIPT=%windir%\system32\cscript.exe 
    SET VBSCRIPT=E:\Repositories\CICD\hooks\post-commit-hook-jenkins.vbs 
    SET REPOS=%1 
    SET REVISION=%2 
    
    "%CSCRIPT%" "%VBSCRIPT%" %REPOS% %REVISION% "AuthenticationToken" 
    

    在你.vbs腳本,則應更換其中作業名稱從參數通過

    repos = args.Item(0) 
    revision = args.Item(1) 
    token = args.Item(2) 
    

    採取的聲明現在,您需要使用這個版本號檢查與svnlook的變化。可執行程序。把絕對路徑在svnlook變量svnlook.exe和執行是這樣的:

    Set changedExec = shell.Exec(svnlook & " changed --revision " & revision & " " & repos) 
    Do Until changedExec.StdOut.AtEndOfStream 
        changed = changed + changedExec.StdOut.ReadLine() + Chr(10) 
    Loop 
    

    現在你有svnlook.exe changedchanged可變輸出。它會告訴您SVN存儲庫中的哪些文件受到提交的影響。

    接下來,由您來解析changed變量的內容以決定要觸發的作業名稱。例如,你可以做一些簡單的事情,比如檢查它是否包含「foo/trunk /」,然後觸發foo-trunk作業。

  • +0

    @SivamohanReddy:在發佈我的答案後,我開始想我可能誤解了這個問題,所以我又添加了一段。 –

    +0

    感謝您的回答@Wim Coenen,我們是否有任何這樣的鉤子腳本觸發示例?此外,我已將所有項目放入單個回購 –

    +0

    在您的問題中,您似乎暗示您已經有一個腳本來觸發jenkins在發生提交時生成。最好將這個腳本添加到問題中,以便我們知道您已經擁有了什麼,然後我們可以看到如何修改它。 –

    相關問題