編碼規(guī)范也可以作為非常有效的培訓支持和指導活動,尤其對于那些經(jīng)驗不足的開發(fā)人員。CI工具可以提供這些數(shù)據(jù)如何隨著時間的推移而變化的高層次圖片,還可以關注開發(fā)人員在應用他們學到的技巧時做得有多好。例如,如果一個類只有很低的代碼覆蓋率,甚至沒有,意味著某個新的開發(fā)人員在消化吸收小組培訓的測試驅(qū)動開發(fā)和測試實踐上出現(xiàn)了問題。這種方法還可以通過代碼審查和定期的代碼質(zhì)量會議(討論任何新問題或者動向的會議)完成。

  一旦構建結束??自動化部署過程

  構建應用程序只是開發(fā)生命周期中的一部分。一旦代碼編譯測試后,需要進行其他的活動,例如部署到階段性(staging)環(huán)境、冒煙測試、功能測試和性能測試、準備發(fā)布說明和提醒QA人員新的發(fā)布。

  將新的構建結果自動部署到集成服務器上是一件相對簡單的事情。而將其部署到階段性環(huán)境或者生產(chǎn)環(huán)境下,則需要涉及一些與常規(guī)構建作業(yè)不一樣的工作。一般而言你需要一個更加嚴格,更加正規(guī)且有更多可跟蹤性和問責的過程。它通常涉及到的任務如下:

  * 為階段發(fā)布標記源代碼

  * 編譯測試應用程序

  * 發(fā)布構建產(chǎn)品

  * 將應用程序部署到階段性環(huán)境中

  * 運行數(shù)據(jù)庫更新腳本或者其他特定環(huán)境腳本

  * 運行冒煙,功能和性能測試

  * 準備并發(fā)布產(chǎn)品說明

  * 提醒關于新階段發(fā)布的相關利益人

  這通常是一個手工任務,但是其中的大部分工作沒有理由不能自動化。事實上,開發(fā)生命周期中的自動化包裝,部署和發(fā)布具有很穩(wěn)固的商業(yè)意義。一方面自動化能夠得到更加可靠的構建:計算機不會忘記部署過程中的某一步,也不會在發(fā)生測試失敗后繼續(xù)進行。它還能夠節(jié)約開發(fā)人員的時間:階段性發(fā)布由之前幾小時的 shell腳本編程變?yōu)榱酥灰c擊一下按鈕。它比以前的速度要更快,并且可以在沒有人的情況下完成工作(例如,通宵或者午休時間)。

  像Maven 2這樣的工具也能夠幫助自動化一些步驟。Maven Release插件使得Maven的用戶能夠自動化處理一些如“更新版本號”,“Subversion中新增標簽”,以及“向Maven存儲庫中發(fā)布構建產(chǎn)品”的工作。它可以用來管理階段構建,并決定在不同的環(huán)境部署不同的發(fā)布產(chǎn)品。盡管如此,一旦產(chǎn)品構建結束并且可以部署到階段性環(huán)境者生產(chǎn)環(huán)境時,這個過程會變得更復雜。

  千真萬確,現(xiàn)實世界中的部署步驟數(shù)目經(jīng)常要比簡單的用一個WAR文件多。根據(jù)應用程序架構和產(chǎn)品平臺,你可能需要在階段性環(huán)境者生產(chǎn)環(huán)境下的數(shù)據(jù)庫中運行SQL更新腳本、用一個專用的工具部署web服務、運行自動化的冒煙測試或者做一定量服務端的工作。

  CI可以幫助簡化比這些還要復雜的步驟。例如通過分布式構建,你可以設立階段性環(huán)境或生產(chǎn)環(huán)境上的構建代理,并在該機器上直接運行相應的任務。幾乎所有的 現(xiàn)代CI工具都支持相當好的安全模型,目的是為了將應用和產(chǎn)品環(huán)境限制給一些特定的人,以及跟蹤誰在什么時間運行了什么構建。

  這是CI的一個相對較新的應用,不同的工具在處理應用程序部署時使用的方法也不一樣。有一些,如Hudson,允許在構建作業(yè)中定義多個步驟,只有當前一 個步驟成功后,才能執(zhí)行后續(xù)步驟。其他的像Cruise和Anthill Pro,都嘗試將部署生命周期中的如階段和生產(chǎn)環(huán)境直接集成到構建工具中,盡管有時候這樣會帶來額外的復雜度開銷。

  還有更多低層次的操作可以和CI服務器聯(lián)合起來使用。一個選擇是使用諸如Ant或者Maven的構建工具。Ant對于這種類型的腳本特別靈活。另一個流行的選擇是古老的Makefile,或者Unix上的shell腳本。它們的缺點是操作系統(tǒng)相關的,并且對于那些不熟悉shell腳本精髓的Java 開發(fā)人員來說很難掌握。想要與Java更加友好,可以選擇動態(tài)語言諸如Groovy或者Gant(一個使用Groovy而不是XML來制作Ant腳本的工具)。 Groovy在提供所有輕量級的動態(tài)腳本語言中所有的優(yōu)點的同時,也保留了對Java開發(fā)人員的熟悉程度和可讀性。

  總結

  這些只是使用現(xiàn)代持續(xù)集成環(huán)境完善構建過程和增強團隊的幾個方法。持續(xù)集成環(huán)境不僅僅是一個構建計劃表,它還可以用來幫助打開隊伍內(nèi)部的溝通渠道、保持構建過程平穩(wěn)有效的運行、時刻監(jiān)控代碼質(zhì)量以及自動化發(fā)布和部署過程。