2016-05-06 25 views
0

我在詹金斯有兩個工作,其中一個工作副本爲「subversion/repos/mainframe」,另一個工作副本爲「subversion/repos /主機/子目錄」。詹金斯SVN提交後掛鉤不會觸發子目錄上設置的作業

然後,我在大型機存儲庫上創建了一個鉤子,在任何提交時調用Jenkins。這個鉤子一直在觸發我的第一個Job而沒有問題。但第二個工作根本沒有被觸發。唯一的區別是第二個Job被設置爲存儲庫中的子目錄,我想保留它。即使我在「subversion/repos/mainframe/subdir」中提交了一個文件,第二個Job也不會被輪詢,只有第一個。

我如何觸發第二個作業後提交鉤?

-commit.cmd後鉤:

\ ... \-commit.exe交%1%2

後commit.exe(清理):

' read Parameters 
sArchive = Environment.GetCommandLineArgs(1) 
sRevision = Environment.GetCommandLineArgs(2) 

' get UUID 
Dim process As New Process() 
process.StartInfo.FileName = "svnlook.exe" 
process.StartInfo.Arguments = "uuid " + sArchive 
process.StartInfo.UseShellExecute = False 
process.StartInfo.RedirectStandardOutput = True 
process.Start() 

Dim reader As StreamReader = process.StandardOutput 
UUID = reader.ReadLine() 
wrGETURL = System.Net.WebRequest.Create(jenkinsTESTURL + UUID.Trim() + "/notifyCommit?rev=" + sRevision) 
wrGETURL.Method = "POST" 
Dim postData As String = "`svnlook changed --revision " + sRevision + " " + sArchive + "`" 
Dim byteArray As Byte() = Text.Encoding.UTF8.GetBytes(postData) 
wrGETURL.ContentType = "text/plain;charset=UTF-8" 
wrGETURL.ContentLength = byteArray.Length 
Dim dataStream As Stream = wrGETURL.GetRequestStream() 
dataStream.Write(byteArray, 0, byteArray.Length) 
dataStream.Close() 

詹金斯日誌(僅第一個作業被觸發):

Mai 10, 2016 11:37:11 AM INFO jenkins.scm.impl.subversion.SubversionSCMSource$ListenerImpl onNotify 
Received post-commit hook from 0e020a5b-918e-1147-8b68-31c6afce54ec for revision 152.138 on paths [look changed --revision 152138 D:\svn\testrepos\mainframe`] 

Mai 10, 2016 11:37:11 AM INFO jenkins.scm.impl.subversion.SubversionSCMSource$ListenerImpl onNotify 
No subversion consumers for UUID 0e020a5b-918e-1147-8b68-31c6afce54ec 

Mai 10, 2016 11:37:11 AM INFO hudson.triggers.SCMTrigger$Runner run 
SCM changes detected in PostcommitHook-Test. Triggering #52 

Mai 10, 2016 11:37:20 AM INFO hudson.model.Run execute 
PostcommitHook-Test #52 main build action completed: SUCCESS 

編輯:

只需將第二個Job改爲指向「subversion/repos/mainframe /」即可。然後觸發器調用兩個作業。這不是一個可行的解決方案,因爲那樣的話提交的方式太多了,不應該影響Job的提交。

+1

post-commit觸發涉及repo的作業的輪詢,您是否仔細檢查了輪詢scm在子目錄作業上是否啓用?它做了民意調查,沒有看到變化? –

+0

是的,輪詢scm在沒有計劃的情況下啓用。 – drouning

+0

是否有菜單條目可以查看最近一次投票的結果?它是否對應於您提交的時間? –

回答

0

管理得到它的工作。首先,我將我的第二份工作指向「subversion/repos/mainframe」的主要存儲庫。要忽略對subdir沒有做的任何提交,subversion插件中有一個高級選項只包含特定的路徑。通過將其設置爲「/subdir/.*」,僅在該文件夾或其子文件夾中提交將觸發作業。

0

爲子目錄啓動作業不是問題。我的猜測是你的鉤子代碼沒有設置來處理子目錄。不過,我們需要看到你的提交後的鉤子代碼來進一步評估。

+0

代碼是否需要做任何特定的處理子目錄?每個提交都會調用設置爲主存儲庫的作業,而不會出現問題。 – drouning

+0

在你的post commit鉤子中,我假設你正在對提交的目錄進行某種解析,以便知道jenkins要觸發的工作。你只需要確保你的解析邏輯是正確的,並確認對於提交給子目錄的情況,鉤子代碼實際上觸發了正確的jenkins工作。您可能需要將一些日誌輸出放入鉤子中,以幫助查明問題所在。 – TheEllis

+0

這應該由jenkins完成,post commit鉤子應該調用jenkins服務器上的notifyCommit url來交付更改後的repo uuid,然後jenkins檢查作業並觀看所述repo uuid並針對每個repu uuid發出投票。 –