1

我們的團隊有一些爭論哪個任務應由CI工具來處理這應該是在構建腳本(我們使用Ant構建和針對的FinalBuilder CI)。如何分割CI工具(如詹金斯)和構建腳本(Ant或Maven)之間的任務?

我的想法是,不僅在構建服務器上,而且在開發人員/質量保證機器上都有用的所有任務應該放在Ant構建腳本中(但我不確定實際的最佳實踐)。

現在我們有任務的下一個列表:

  1. 更新目錄(SVN更新)
  2. 編譯
  3. 運行測試
  4. 化妝覆蓋報告
  5. 運行靜態分析並生成報告
  6. 包裝(使戰爭文件)
  7. 部署到我們B-服務器
  8. 發送電子郵件通知(帶鏈接的報表和構建狀態)
  9. 運行DB更新工具
  10. 把構建結果(war文件和報告),以一個特殊的地方

(其他任何CI-常見任務?)

你會被你的CI工具,你將要放置構建腳本的方式做哪些任務?

我的做法是未來:

Ant任務:編譯,測試,覆蓋報告,分析儀,打包,部署,DB更新。 CI工具:svn更新,電子郵件通知,將編譯結果放到特殊位置。

(組Ant任務部分是由一組任務默認的Maven的啓發)。

+1

也許這個問題會更適合[程序員](http://programmers.stackexchange.com/)。 – oers 2012-02-02 14:10:41

回答

0

讓我們來看看你想要做的任務......

  • 更新目錄(SVN更新)

嗯,詹金斯能做到這一點呢。

  • 編譯

而且,這也...

  • 運行測試

爲什麼不呢? Jenkins可以在構建頁面上顯示JUnit測試結果。如果測試需要很長時間才能完成,您可以設置第二份工作來完成測試。讓詹金斯將工作文件從舊作業複製到新作業,然後運行第二份作業。有一個Copy Artifacts插件可以幫助你做到這一點。

  • 化妝覆蓋報告

詹金斯能做到這一點。而且,就像JUnit測試一樣,Jenkins可以在構建頁面上顯示結果。

  • 運行靜態分析器並生成報告。

詹金斯也可以這樣做。

  • 包裝(使戰爭文件)

詹金斯能做到這一點。你甚至可以在詹金斯存儲戰爭文件。人們可以將其複製並部署到他們的系統上。或者,您可以讓Jenkins將其存儲在您的Maven存儲庫中。哎呀,你可以做到這一點。

  • 部署到Web服務器

詹金斯能做到這一點,但我更喜歡手動做到這一點 - 除非有一些測試我想做作爲構建過程的一部分。談到部署時,我寧願自己做事情。

  • 發送電子郵件通知(帶鏈接的報表和構建狀態)

標準詹金斯發出通知,對不良和不穩定構建(構建所建立起來,但如果測試失敗),然後一旦構建好又發送一封電子郵件。你真的想要發送一個電子郵件與每個構建?如果是這樣,請使用ext-mail插件。

  • 運行DB更新工具

再次,這是我喜歡做手工 - 除非這是我測試的一部分。

  • 把構建結果(war文件和報告),以一個特殊的地方

沒必要這麼做。 Jenkins個人構建網頁本身可以存儲戰爭文件,測試結果,開始構建以及更改的內容。這些更改可以鏈接到Fisheye,Sventon或另一個源存儲庫Web瀏覽器,該瀏覽器允許用戶單擊文件並準確查看更改的行。

詹金斯也有一個永久鏈接到最後一個良好的構建,最後一個壞的構建和最後一個構建。我使用iframe(Bad David!使用過時的HTML代碼)將這些頁面嵌入到官方企業網頁中。

總之,詹金斯可以爲你做所有的東西,所以爲什麼不讓它呢?

1

好問題。

我確實認爲任何你想在構建服務器之外定期做的事情都應該在腳本中,但不一定在你的「構建」腳本中。例如,我將把你的部署和數據庫升級步驟放到一個單獨的腳本中(是的,我不同意David W,並認爲你絕對應該自動執行這些步驟)。我們過去曾使用過Ant來完成部署任務,並且完成了它。但是我也聽說Ant是一個糟糕的構建腳本語言,因爲它不適合程序部署任務。這是倒退。使用Ant進行構建,如果它不適合部署,請使用其他腳本進行編寫。

構建服務器的核心作用是始終如一地自動運行這些過程並報告結果。對於單元測試等,這可能意味着調用運行測試的腳本,但具有智能來以趨勢和分析等有意義的方式解析結果。

以上所有建議均以「合理範圍內」爲框架。如果偶爾在構建服務器之外做某些事情,編寫腳本很困難,並且在構建服務器級別進行集成非常容易,所有這些方法都可以省去工作,只需在那裏完成。