2010-05-24 121 views
5

我們的系統包含許多.NET網站,類庫和MSSQL數據庫。我們使用SVN進行源代碼管理,並使用TeamCity自動構建到測試服務器。關於管理髮行版依賴關係的提示?

我們的團隊通常一次在4或5個項目上工作。我們試圖將許多變化變成每2-4週一次的大規模推廣。

我的問題是跟蹤所有的卷展的依賴關係。例如:

網站不能活去,直到我們推出了分公司X類庫B的,建於翻臉類的主幹庫C,這就需要配置更新Y和Z和數據庫更新d,其中需要遷移腳本E ...

它變得更加複雜 - 就像確保每個開發人員的項目實際上與其他人兼容並且針對相同版本構建一樣。是的,這與技術問題一樣是一個管理問題。

目前我們的非最優的解決方案是:

  • 白板列出的功能,沒有去現場還
  • 規劃部署時,依靠我們的記憶和直覺,直到我們可以肯定我們已經想到了一切...
  • 在我們的臨時環境中運行。這是一個很好的指示,但我們常常不知道Staging是否與Live保持同步100% - 這是我希望解決的問題的一部分。
  • 某些數量在推出日上演。

到目前爲止好,減去幾個關閉電話。但隨着我們系統的不斷髮展,我希望有一個更科學的發佈管理系統,可以提供更多的靈活性,比如能夠自行推出單個更改或錯誤修復,並且知道它不會破壞其他任何內容。

我猜最好的解決方案涉及某種版本編號系統,也許使用項目管理工具。我們是一家初創公司,所以我們在堅持嚴格流程的宗旨上並不太熱,但我們很樂意開始,只要它不會增加開銷而不是價值。

我很樂意聽到其他解決此問題的團隊的建議。

回答

1

聽起來你已經有了Continuos Integration Server,但是沒有正確使用它。問題的一部分是你不知道哪些更改會在發佈中結束,哪些不會發生。

我假設你所有的項目都是一個包含源代碼控制庫的項目的一部分。作爲第一個措施,您應該嘗試將開發中的代碼與分支中的穩定/待發布代碼分開。定期組建Teamcity,全面打造穩定分支。如果一系列更改已準備好發佈,則更改的創建者應負責將它們與所有依賴關係合併到穩定分支中。 CI會告訴你一切是否順利。這是CI的想法,你「隨時準備發佈」。

您提到過您的團隊經常處理幾個項目,並且他們有一定的相互依賴關係。這讓我有點懷疑:

  • 如果項目是相互依存的,爲什麼它們是分開的?即使他們以不同的速度發展,他們是否真的需要分開?
  • 你是否因此對每個項目都有不同的存儲庫?這將使發佈真的很難。
  • 可以依賴關係在二進制級別上進行管理嗎?還是有編譯時間依賴性?

根據我的經驗,管理二進制級別的依賴性總是比較容易(只需升級項目中的庫)。另一方面,我從來沒有這樣的情況,不相關的項目依賴於相同的DLL(這本身就是一個應用程序,而不僅僅是一個實用程序庫或其他東西)。在這種情況下,管理源級別的依賴關係更爲容易。最後,一個隨機想法:如果你使用分佈式版本控制系統(如git或mercurial),將所有代碼放在同一個存儲庫中將會非常容易。每個項目都可以有自己的分支,它通過主分支的最新更改(向前整合)定期更新。 更改完成後,項目分支會合並回主分支(反向集成)。微軟的Windows團隊提出了這個工作流程。

+0

項目位於單個存儲庫中的單獨文件夾中。相互依賴的一個例子是我們的網站,移動網站和API都參考相同的業務邏輯庫。與其他一些項目一樣,參考相同的實用程序庫。 同意我們沒有充分利用CI,我喜歡穩定分支的想法。但是這需要處理代碼。數據庫,配置,遷移腳本和其他因素呢? – realworldcoder 2010-05-24 17:48:40

+0

@Andrew:這一切都屬於您的代碼到您的svn回購中。 – 2010-05-24 17:54:14