2008-08-18 35 views
26

或者,實際上建立一個構建過程時,一開始就沒有太多的構建過程。改善您的構建過程

目前,這幾乎是我的小組面臨的情況。我們主要進行網絡應用程序開發(但目前沒有桌面開發)。即使使用我們適中的應用程序,軟件部署也很難並且笨拙,而且我在這個團隊(和公司)的兩年中遇到了太多問題。現在已經過去了,我們可以一箭雙鵰殺死兩隻喬爾測試鳥(每日構建和一步構建,兩者都不以任何形式存在)。

什麼這裏經過,我是在各種各樣的事情,我需要做或思考,從誰已經在軟件開發的時間比我有,也有更大的大腦有些人一般見識。我相信這將成爲目前發佈在測試版中的大部分人員。

相關的工具: 視覺構建 源安全6.0(我知道,但我不能做,我們是否不使用Source Safe中的任何內容,這可能是接下來的戰鬥我打。)

姑且,我有一個視覺構建項目,這是否:

  1. 獲取來源和發生在本地目錄,包括項目所需必要的DLL。
  2. 獲取配置文件,並根據需要重命名(我們將它們存儲在不是實際的應用程序的一部分特殊的子目錄,它們根據使用命名)。
  3. 構建
  4. 預編譯使用命令行復制到這將是一個「構建」目錄
  5. 複製到目的地使用Visual Studio。
  6. 獲取任何必需的附加資源 - 主要是與項目關聯的文檔,圖像和報告(並放入步驟5中的目錄)。有很多這樣的東西,我以前不想包括它。但是,我只會複製已更改的項目,所以也許它是無關緊要的。我不確定我是否真的想在早期的步驟中包含這些東西。

我仍然需要哄一些從Visual Build中註銷所有這些,但我還沒有達到我需要做的那一點。

有沒有人有任何意見或建議,使?我會注意到,我們目前沒有使用部署項目。它會刪除我假設的這個版本中的一些必要步驟(比如web.config交換)。

回答

18

當承擔一個從未有過自動化構建過程的項目時,更容易分步實施。不要試圖一次吞下太多,否則會感到壓倒性的。

  1. 首先使用自動化構建程序(即nant/msbuild)通過一步來編譯代碼。我不打算辯論哪一個更好。找到一個讓你感覺舒服並使用它的人。構建腳本與源代碼控制中的項目一起生活。
  2. 找出您希望如何觸發自動構建。無論是將其連接到CruiseControl或使用計劃任務運行每晚構建任務。 CruiseControl或TeamCity可能是最好的選擇,因爲它們包含許多工具,可用於簡化此步驟。 CruiseControl是免費的,TeamCity是免費的,您可能需要爲此付費,具體取決於項目的規模。
  3. 好吧,到了這一點,你會對這些工具感到非常舒服。現在您已經準備好根據您想要做的測試,部署等來添加更多任務...

希望這有助於您。

9

我有一套Powershell腳本,爲我做這些。

腳本1:構建 - 這個很簡單,它主要通過調用msbuild來處理,並且它還創建我的數據庫腳本。

腳本2:軟件包 - 這一個需要各種參數來爲各種環境(例如測試)打包發佈,以及由許多機器組成的生產環境的子集。

腳本3:部署 - 這是由包腳本創建的文件夾中的每個單獨的機器上運行(部署腳本複製作爲包裝的一部分)

從部署腳本,我做理智檢查諸如機器名稱之類的東西,所以事情不會意外地被部署到錯誤的地方。

對於web.config文件中,我使用

<appSettings file="Local.config"> 

功能有那些已經在生產機器替代,他們是隻讀的,所以他們不會意外覆蓋。 Local.config文件沒有簽入,我不必在構建時進行任何文件切換。

[編輯]的appSettings文件的當量=一個配置部分是configSource =「Local.config」

1

我只上了幾個.NET項目的工作(我已經做了大部分的Java),但我建議的一件事是使用像NAnt這樣的工具。我將構建連接到IDE時遇到了一個實際問題,它最終導致建立構建服務器變得非常痛苦,因爲您必須在任何想要從未來。

這就是說,任何自動構建比沒有自動構建要好。

5

兩年前我們從使用perl腳本切換到MSBuild,並沒有回頭。 構建Visual Studio解決方案可以通過在主XML文件中指定它們來完成。你可以在.net中創建一個新的類,從任務中重寫Execute函數,然後引用這來自你的build xml文件。

有一個相當不錯的介紹在這裏: introduction

1

我們的構建過程是一堆已經發展了十年左右的自產自銷的Perl腳本,沒有什麼幻想,但它能夠完成任務。一個腳本獲取最新的源代碼,另一個腳本創建它,第三個腳本將其轉移到網絡位置。我們進行桌面應用程序開發,所以我們的分期過程還構建了用於測試的安裝程序包,並最終向客戶交付。

我建議你把它分解成單獨的步驟,因爲有些時候你想重建但沒有得到最新的,或者只是需要重新階段。我們的腳本還可以處理來自不同分支的構建,因此可以考慮使用您開發的任何解決方案

最後,我們有一個專門的生成機器,每天晚上重建幹線和維護分支,併發送任何問題或成功完成的電子郵件。

0

我們的構建系統是一個makefile(或兩個)。因爲它需要在兩個窗口(作爲VS下的構建任務)和Linux下(作爲正常的「make bla」任務)運行,所以它很有趣。真正有趣的是,構建從.csproj文件獲取實際文件列表,並從中構建(另一個)makefile,然後運行該文件。在這個過程中,make文件實際上稱它爲self。

如果思想不嚇唬讀者,然後(他們要麼是瘋了還是),他們或許可以得到令+「你最喜歡的字符串壓榨機」爲他們工作。

1

有一件事我會建議確保您的構建腳本(和安裝項目,如果你的情況有關)是源代碼控制。我傾向於有一個非常簡單的腳本,只需檢查\獲取最新的「主要」構建腳本,然後啓動它。

我說這二/三我看到球隊只是在服務器上運行最新版本的構建腳本,但不僅不會把它的源代碼控制,或當他們這樣做,他們只檢查它在一個隨機的基礎上。如果你讓構建過程從源代碼控制中「獲得」,它會迫使你保留最新最好的構建腳本。