2009-01-20 81 views
14

我想這裏的每個人都會同意,爲了被視爲一個專業的軟件公司,你必須有一些基本的東西。如何使用構建服務器啓動並運行?

毫無疑問的是,這些事情之一是構建服務器,問題是,你需要走多遠。

  • 構建服務器的最低要求是什麼? (某處只是編譯?)
  • 什麼是您的構建服務器的終極目標是什麼? (計劃,源代碼控制集成,自動部署到測試/ Live服務器)
  • 哪裏是一個良好的開端假設你有什麼的時刻?

如果我們能夠列出一些業餘開發人員可以採用的簡單任務,以便將它們設置到功能齊全的構建服務器的正確軌道上,那將是非常棒的。

這也將是很好的聽到人們覺得他們執行所有他們需要的功能的「完整的」系統設置,以及他們如何去約從頭開始建立的一切。

回答

12

你可以尋找到Cruise Control開始。

還有CruiseControl.net如果這是你的毒藥。

本質不過,你需要以下原料:

  • 專用環境(虛擬機/服務器不使用一個開發人員的機器,除非它只是你即使是這樣,運行一個虛擬機,如果你能。 。更容易將其移動到服務器如果在您的組織變爲可用/)
  • 一個支持標記源代碼控制系統/標記版本(例如,Subversion + TortoiseSVN
  • 構建腳本。這些可以是使用命令行啓動devenv.exe或msbuild.exe應用程序的批處理文件,也可以使用類似AntNAnt的文件。

在這種情況下,CruiseControl充當Continous Integration服務器,並且可以確保在檢入代碼時完成了構建。這意味着你知道the build is broken是否比你每晚做的更快。不過,你應該也可以每晚做一次。

+1

哈德森現在有我的偏好。它具有我需要的所有功能,並且我發現它更容易設置和。 – 2009-03-08 05:50:03

+0

我也認爲哈德森是快速起步和跑步的更好選擇。 – Tim 2009-10-18 23:23:30

2

如果您使用Cruise Control,則啓動的位置是一個Ant build.xml,可以手動執行作業。

您需要一個版本控制系統,可以做標籤簽出。

您需要使用Ant任務運行JUnit測試並生成HTML報告。

0

我不能給大家介紹了我們如何設置我們構建服務器了(我只參與在開始)的細節,但:

  1. 我們開始了一個內部系統,實施中ASP.NET和一個.NET Windows服務,使用NAnt來完成實際的構建。實際上,大多數工作流程都是在NAnt中實現的(例如,給人們發電子郵件,複製周圍的東西等)。
  2. 我們轉移到了JetBrains TeamCity(有一個免費的可用裁減版本),它仍然爲我們提供了很好的服務。

我們將它用於由commit觸發的構建:這些構建二進制文件並運行單元測試。從這裏,我們可以做一個完整的構建,也可以完成MSI。從那裏開始,我們有了一系列運行更深入測試的系統測試版本,這些系統測試版本涵蓋了使用虛擬機構建的環境(使用單獨的域控制器,SQL Server框等)。當系統測試通過時,構建可用於我們的QA部門進行手動測試以及一些我們尚未實現自動化的迴歸測試。

2

我說你必須先實施一個構建策略,這樣你才能以結構化的方式構建你的代碼 - 我使用NANT。

對於基本的構建服務器 - 使用其中一個CI產品來監控您的源代碼管理,並在檢測到更改時觸發構建。例如:cruiseControl。

一旦你獲得了基本構建 - 在成功構建之後添加單元測試的運行。

我已經建立的最成功的系統有3個不同的版本: - - 一個在檢查時觸發的系統 - 所有這些都是構建代碼。 - 一個隨需應變的應用程序,生成安裝程序,然後將安裝程序安裝到共享驅動器中,供測試人員選擇 - 每天在晚上10點發布的日誌。這: - 進行了一些代碼生成從UML模型 建立DB和C#代碼 - 構建代碼 - 創建了一個測試Oracle實例 一個新的版本驗證測試用戶 - 運行應用程序架構到數據庫 - 發射了一串單元測試 - 清理數據庫用戶(如果測試成功) - 跑覆蓋分析構建單元代碼覆蓋率的報告中,我們使用這NANT,CruiseControl.NET,

軟件自定義代碼生成系統,構建oracle模式的自定義應用程序以及用於代碼分析的NCover。

2

首先閱讀Martin Fowler關於Continuous Integration的優秀論文。

我們爲一個主要項目> 2000 kSLOC建立了這樣一個系統,並證明它本身是非常寶貴的。

HTH

歡呼聲,

羅布

0

在Java領域我已經測試可用構建環境。自動構建的問題是,你經常花費相當多的時間來跟蹤它。在我們從atlassian轉向商業bamboo之後,我們發現我們不得不花費大量的時間來呵護構建箱,這在我們的案例中是非常好的經濟。 Bamboo還支持集羣,因此您可以根據需求的變化添加便宜的盒子。

1

我使用Cruisecontrol.NET和msbuild構建腳本。

我可以手動使用buildscript,這樣我就可以獲得最新版本的代碼庫,使用命令行很容易構建代碼庫。 (如果您正在處理由多個解決方案組成的應用程序,這非常有趣)。

接下來,我的CruiseControl.NET buildserver也使用這個buildscript。它會定期檢查是否有更改提交給源代碼管理。
如果發生這種情況,CC.NET會執行我在buildscript中定義的'最新'任務,構建所有內容,執行單元測試並執行靜態代碼分析(fxcop)。

我的'buildserver'只是一箇舊的工作站。這是一款帶有1GB內存的PIV,3Ghz,它完美地完成了它的工作。

我會覺得有趣的另外一件事是有能力自動部署新版本或建立設置。 我還沒有這樣做,因爲我不知道這是一個好主意,也沒有找到一個好的策略,但尚未這樣做... 我的意思是;正在將一些組件的新版本部署到關鍵任務應用程序的生產中是一個好主意?我不這麼認爲...

我認爲這是一個良好的開端: [http://confluence.public.thoughtworks.org/display/CC/Home;jsessionid=5201DA7E8D361EB164C40E519DA0F0DE][1]

至少,這就是我開始建立我的構建服務器時看。 :)

[1]:CruiseControl的

的首頁
0

嘗試&找到的東西,與您現有的做法適合在建設方面 - 例如例如,如果您使用的是Maven,那麼嘗試&就不太適合使用基於Ant的buildserver!

理想情況下,它應該能夠監視您的源代碼管理系統,檢出代碼,構建,運行一些測試。&發佈結果時不會意識到它,或者至少不會「直到它報告失敗。就個人而言,我建議哈德森(https://hudson.dev.java.net/)作爲一個很好的起點,因爲它很容易安裝&運行&有一個體面的用戶界面。

4

Hudson是一個偉大的CI。

我們在本地經營的農場,但我們開始通過下載的hudson.war和做

Java的罐子的hudson.war

它與SCM,臭蟲貨運系統實在是真棒集成。

如果你想保留舊版本,你需要一些磁盤空間。

享受它是迄今爲止最直接的CI解決方案。

HTH, Hubert。

2

Cruise,Maven,Hudson等都很棒,但它總是值得擁有一個權宜之計。

你應該有一個批處理文件,shell腳本或簡單的書面指令,允許你從任何機器運行構建。我們過去建立的服務器不可用,並且能夠快速切換到另一臺機器是非常寶貴的!

構建機器的規格不需要很重要,除非你有一個怪物項目。我們試着將構建時間縮短到10分鐘(包括單元測試),並且我們有一個非常大的項目。

不要試圖創建或編寫自己的構建系統,因爲「沒有任何工具足夠好」。所有現代構建系統都允許您編寫插件來執行自定義內容。

1

大致順序 - 最小/最先進的通過更復雜的

  • 抽到一組特定的源到任何機器
  • 能夠構建源(沒有問題)
  • 能(時間表)每個夜晚/或某個其他定義的時間段內構建,無需用戶干預
  • 一個(或多個)專用構建服務器(不共享爲qa或dev機器)
  • 能夠在每次簽入/提交
  • 通知構建狀態有關方面構建
  • 隨時
  • 作爲構建的一部分創建安裝
  • 部署/生活的能力,如果構建好提供構建狀態後
  • 運行單元測試
  • 在產品
  • 報告運行測試,這些測試的結果
  • 靜態代碼分析和報告 ... 然後列表繼續

不要害怕以批處理文件或shell腳本或其他臨時方式開始。在CI狂熱之前,人們做出了完美的軟件。在哈德遜和克魯斯控制之前有很多好的過程 - (我不是在敲那些或其他人 - 我使用哈德森等) - 但不要錯過這一點 - 這些東西在這裏幫助你 - 不會成爲霸道的過程)

0

我們首先編寫將在開發人員機器上運行的批處理腳本。一旦我們將所有流程自動化,我們將它們移動到構建服務器。

在工具方面,我們目前正在從巡航控制轉移到TFS。

相關問題