簡體   English   中英

Jenkins根據多個項目中的提交觸發構建

[英]Jenkins trigger a build based on the commit in multiple projects

最近我開始研究CI項目,它必須在SCM提交(Git / SVN)上構建項目。 我嘗試遠程使用Build觸發器,當我提交代碼並成功構建應用程序時,它會觸發Job。

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

詹金斯有沒有辦法做到這一點?

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

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

' URL to open
sUrl =  "http://builduser:a844e9e505bfc5e6e9ce6e953ba5443a@localhost: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 

Post-commit.bat文件的代碼

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

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

如果你

  • 在作業配置的“源代碼管理”部分下設置項目的SVN / git位置
  • 然后在“構建觸發器”部分中選擇“輪詢SCM”

然后它應該像你想要的那樣工作。

您提出此問題的事實可能意味着您正在從構建腳本執行源代碼檢查,對吧? 避免這種情況,而是讓Jenkins處理svn checkout / git clone。

或者你可能只是想避免輪詢,這個問題是關於如何從SVN post-commit鈎子中觸發不同的項目,具體取決於你提交的SVN存儲庫中的位置? 在這種情況下,您需要編寫一個更復雜的鈎子腳本,該腳本分析受提交影響的路徑,並根據該腳本觸發正確的Jenkins作業。

編輯

在post-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腳本中,您應該替換從參數中獲取jobName的語句

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

現在,您需要使用此修訂號來使用svnlook.exe檢查更改。 將svnlook.exe的絕對路徑放在svnlook變量中並執行如下操作:

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

現在,您已在changed變量中changedsvnlook.exe的輸出。 它告訴您SVN存儲庫中的哪些文件受提交影響。

接下來,由您來解析已changed變量的內容以決定要觸發的作業名稱。 例如,您可以執行一些簡單的操作,例如檢查它是否包含“foo / trunk /”,然后觸發foo-trunk作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM