2012-03-26 14 views
3

鑑於:使用Jenkins,Perforce和Ant,我如何只對自上次綠色構建以來發生更改的文件運行PMD?

  • 似乎有沒有簡單的方法來獲得在詹金斯的「改變」文件列表(見herehere
  • 似乎有沒有快速的方式來獲得的列表自標籤xxxx以來文件已更改

如何優化我們的構建,以便在運行PMD時,它只針對自上次構建綠色以來已修改的文件運行。

備份有點...我們需要PMD 3-4分鐘,以防止〜150萬行代碼運行,如果發現問題,報告不約而同內存用完它完成之前。我希望能夠縮短我們編譯時間的幾分鐘,並獲得關於失敗的良好報告。我原來的做法是,我會:

  • 從詹金斯
  • 運行PMD得到更改列表針對列表的工會和pmd_failures.txt的內容
  • 如果PMD失敗,包括列表pmd_failures.txt中的失敗文件

比我想要的更復雜,但值得擁有更快但仍然可靠的構建。

一旦我意識到詹金斯不會輕易給我想要的東西,我意識到還有另一種可能的方法。我們標註每一個綠色建築。我可以簡單地獲取自標籤以來更改的文件列表,然後我可以完全取消pmd_failures.txt。

沒有骰子。越來越標籤以來XXXX改變從Perforce的文件列表的想法似乎從來沒有從精簡:

 

    $ p4 files //path/to/branch/[email protected] > label.out 
    $ p4 files //path/to/branch/[email protected] > now.out 
    $ diff label.out now.out 

惱人的,但更重要的還要慢於我們的許多成千上萬的文件,不是簡單地運行PMD。

所以現在我期待到試圖與其他建立的東西,它仍然是浪費時間和資源,使我們構建更復雜的並行運行PMD。在我看來,我不能輕易地從Jenkins或Perforce獲取已更改文件的列表。是否有其他人找到了解決這些問題的合理解決方法?

回答

4

我想我已經找到了答案,並且如果它有效,我會將我的答案標記爲正確。

這比我想要的要複雜一些,但我認爲這值得節省3-4分鐘(以及潛在的內存問題)。

  1. 在良好構建結束時,將良好更改列表保存爲Perforce計數器。 (構建後任務)。看起來是這樣的:
     
    $ p4 counter last_green_trunk_cl %P4_CHANGELIST% 
    
  2. 當運行PMD,讀取計數器到屬性last.green.cl,並從獲得的文件列表:
     
    $ p4 files //path/to/my/branch/[email protected]${last.green.cl},now 
    //path/to/my/branch/myfile.txt#123 - edit change 123456 (text) 
    //path/to/my/branch/myotherfile.txt#123 - add change 123457 (text) 
    etc... 
    (have to parse the output) 
    
  3. 運行PMD對這些文件。

這樣我們不需要pmd_failures.txt,我們只對自上一次綠色構建以來發生更改的文件運行PMD。

[編輯:改變它使用p4計數器,這比檢查文件快。此外,這是非常成功的,所以我將它標記爲答案]

1

我不是100%肯定,因爲我從來沒有使用Perforce公司與詹金斯,但我相信Perforce公司通過環境變量$P4_CHANGELIST變更表數。有了這個,你可以運行p4 filelog -c $P4_CHANGELIST這應該給你來自那個特定變更列表的文件。從那裏開始,編寫一些文件並不難,只需要獲取已更改的文件(加上舊的故障進入PMD)。

我很長時間沒有使用Perforce,但我相信-Ztag參數可以更輕鬆地解析各種腳本語言的P4輸出。

1

你有沒有想過使用自動標籤?它們基本上只是一個更改列表號的別名,所以更容易獲得兩個自動標籤之間不同的文件集。

相關問題