2010-07-14 60 views
1

我有一個使用哈德森的持續集成設置,最近我配置了作業以使用svn update來獲取最新版本的代碼。我非常喜歡這種方法,因爲它允許msbuild適當地進行版本化,並且只構建受影響的程序集。如何在使用SVN更新時在Hudson(CI)中保留編譯器警告?

但是,我注意到,因爲我沒有再次構建所有的程序集,所以如果沒有構建這些程序集,我會放棄所有編譯器警告。

例如,如果我有3個組件經由縮進證明依賴關係:

  • 組件1 10警告
    • 組件2(取決於1)10警告
      • 組裝3(取決於2)10個警告

第一構建將構建所有3個組件和日誌30個警告。

下一次構建,如果我只更改程序集3,Hudson將只構建程序集3,並且我只會爲該構建獲得10個警告,有效標記20個警告爲「固定」。

據我所知,這裏不會有任何解決方法,但我很想知道是否有人配置Hudson來將這些編譯器警告從一個構建保留到另一個構建。

編輯:是的,我意識到這可能會變成「你應該/不應該在CI盒子上進行更新」的辯論,但我們有更新方法的原因。

回答

1

我會改變你的方法到CI構建。在構建機器上進行增量構建是非常具有誤導性的,只有邊際價值(恕我直言),除非你的系統是操作系統的大小,否則你可能不會節省太多時間。

如果您的程序集不經常或永遠不會更改,請將它們作爲「第三方」依賴項打包(甚至可能在合併模塊中,以便您的部署可以輕鬆提取它們),並且不要使用CI重建它們。

在另一方面,如果所有的組件是揮發性(需要在一個發佈週期必須重建一次以上)建立他們的所有,所有的時間。

+0

它以什麼方式誤導?我的CI框仍將構建並生成組件的最新版本。 此外,做一個更新VS一個完整的擦拭了我們50-75裝配從15分鐘以上降低到平均2-3分鐘建那麼這是值得我們。 – 2010-07-14 19:22:21

+1

也許我太保守了,但我不相信任何不是乾淨的構建。增量構建可以隱藏細微的東西,比如引入循環依賴,這會破壞一個乾淨的構建。但是15+下降到2-3分鐘確實改變了方程式。 – dkackman 2010-07-14 20:23:00

+0

我同意dkackman關於信任,但不一定關於方程中的重大變化。 – 2010-07-15 13:26:06

0

您可以持續集成以查看一個裝配如何幹涉其他裝配。所以,如果他們有依賴性,你應該建立所有。如果他們根本沒有依賴關係,則爲每個程序集創建一個作業(在您的案例3中)。

您描述的版本不是完整的版本,它只是一個更新版本,應該在開發者機器上完成。

編輯:版本發行

可以配置哈德森(與SVN連接)忽略某些用戶提交。使用這個黑名單,msbuild在進行版本控制時應該沒有問題。

+0

權,我們設計做一個更新的構建,因爲沒有必要重建並沒有改變組件。各個開發人員根據需要更新構建並完成重建。我認爲你會很難爭辯CI構建不應該是更新構建(如果你指的是這樣)。另外,通過更新,我們允許msbuild處理這裏討論的版本:http://stackoverflow.com/questions/1126880/how-can-i-auto-increment-the-c-assembly-version-via-我們慈平臺 - 哈德森 – 2010-07-14 19:14:28

+0

我編輯的問題,以表明這3個組件相關 – 2010-07-14 19:20:05

+0

我的相關定義是,如果上游項目的變化,它可能會導致破下游項目的建設。因此完整的構建是必要的。如果情況並非如此,那麼他們是獨立的。 – 2010-07-15 13:29:10

0

那麼,MSBuild的是做什麼應該做的:它唯一的記錄,它遇到的警告。

如果必須使用SVN更新,唯一的辦法就是以某種方式:

  • 解析生成日誌,並確定哪些組件並沒有內置
  • 的foreach未建組裝
    • 仰望上次構建特定組件的警告
    • 手動將這些警告轉發到當前版本。

可能/可能不笨拙,它必須具備的MSBuild日誌格式有了深入瞭解。

人們也可以認爲它是一種誤導,因爲你會被記錄未記錄爲特定的構建,健康警示。

+0

只有三個獨立的版本,每個裝配都會有正確的警告。 – 2010-07-15 13:42:35

+0

我已經誠實地想過,但是idk在大型項目上有多可行 – 2010-07-15 15:01:26