2012-09-03 25 views
3

簡短的問題然後解釋 我們希望創建修補程序並僅包含由於dotnet應用程序的一些錯誤修正而在構建中發生更改的文件。補丁應該自動構建在涉及SVN,Cruisecontrol.net和msbuild的持續集成過程中。.NET應用程序的自動修補程序構建和部署

我們在這裏有一個場景: 我們希望維護一個運行在遠程服務器上的.net應用程序,並使用持續集成。源代碼位於SVN中,並具有DEV,QA和PROD的3個不同的存儲庫。 我們的開發人員幾乎每天都會進行新的錯誤修復,並在初次測試和滿意後將更改合併到開發庫中。 解決某個問題後的代碼或添加了某個功能後,將其合併到QA存儲庫中。 QA代碼是在QA機器上手動構建和測試的。 質量保證測試結束後,我們將其合併到PROD中。通過它,QA還爲需要手動替換或更改的文件創建新的補丁。然後將這些修補程序部署在臨時服務器上。在此基礎上進行測試,直到完美,然後將修補程序部署到實際的遠程服務器上。

爲了尋求持續集成,我們現在試圖使用CruiseControl.net和msbuild的混合來完成這個過程。 這個過程很好,直到我們必須從QA生成補丁的階段自動生成。補丁生成後,我們將把它們放在一個ftp服務器上,並從它們中將它們下載到登臺服務器中進行測試。 問題即從新版本生成補丁有幾個方面。該應用程序的解決方案文件包含許多項目,並且使用postbuild事件將dll複製到啓動應用程序bin文件夾中。所以我們在實際應用中有一個特定的目錄結構,它本身就是6個或多或少相互獨立的解決方案的組合。

我們試圖創建補丁的方式是我們正在搜索svn的日誌以查找哪些文件已更改。然後我們解析它找到項目名稱。然後,我們將通過使用包含應用程序所有文件的映射文件,將該項目的bin目錄中的所有文件以該版本具有的特定方式複製到patch文件夾中。

所以任何人都可以請建議一個更好或更簡單的方法來提供補丁提供我們有svn和cruisecontrol.net。或者任何其他開源工具來做到這一點。

希望這個問題是清楚的

+0

問題是指您的應用程序安裝在服務器上,那麼如果版本號有變化,您是否想自動更新.DLL文件?如果是這樣的話,可以將從連續構建中輸出的程序集合放到一個文件夾中,那麼我可以看看發佈一個解決方案:) – LukeHennerley

+0

否部署任務是由腳本完成的,該腳本只是將修補程序放入ftp和遠程服務器自動下載任何新的補丁並應用它們。如果您有任何其他方法有更好的主意,我們可以實現它,而不是腳本 – puneet

+0

這正是我想要做的。通過查找自上次構建以來哪些dll已更改並將其放入預定義的目錄結構中來創建補丁。 – puneet

回答

1

如果你的MSBuild任務正在執行構建,而不是重建則未受影響的dll文件的日期/時間不會有他們的修改日期發生變化。

我建議這,原因如下:

  • 的MSBuild將更新已受到變化的任何組件的修改日期 - 即界面改變?
  • 程序集是你想要部署的,所以檢查這個而不是修改源。否則,你需要知道構建過程(不會改變) - 即。 Souce文件位置,參考文件等。

您的部署只包含修改日期> = BuildDate的構建目錄中的dll。

+0

我們已經實現了上述方法,它工作正常。我們只需要注意補丁是爲所有更新而製作的。我們現在正在嘗試使ccnet一次只更新一次修訂版,以便我們爲各個修訂版提供單獨的修補程序。 – puneet

3

整個過程總體上違背了既定的最佳實踐。如果你有充足的理由,這不一定是壞事,但我不會在這裏看到他們。

實際上,您並未使用QA和DEV環境來確保生產的穩定性。更糟糕的是,您使用不同的源代碼樹爲它們構建代碼。這爲可能的故障引入了部署過程的新點。

解決這個問題的標準方法是使用單個SVN代碼樹 - 在發佈到QA時使用一個版本(使用已經構建的二進制文件!),可能在釋放到PROD時再次標記它。不要重新構建二進制文件,請使用您實際測試的文件!

0

我同意skolima關於推薦構建&補丁程序。您應該從您的初始標籤和修改中創建補丁,然後創建一個必須在所有環境中部署的新版本。

在我的公司,我們正在使用這種方法:

  1. 每個全成建設是我們的CI服務器
  2. 當需要特定版本的補丁自動標記,程序員複製 &入住然後在我們的CI服務器上安裝一個特定的「Patch」版本,它的作用與「Patch」標誌的正常版本完全相同,並且指向已修補的源文件

部署目標相同,構建過程相同,只有源更改。

加號是修補程序在CI上有它們自己的構建歷史,因爲它們是單獨構建的,但被視爲正常構建。

無論如何,如果你想通過CI,ihmo自動化兩個倉庫之間的補丁過程,你必須創建特定的MSBuild任務來完成這個任務。您可以嘗試合併它們之間的變化或檢查SVN 差異 & 補丁命令。