構(gòu)建自動(dòng)化駛向何方?
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2011/1/26 11:27:53 ] 推薦標(biāo)簽:
編碼規(guī)范也可以作為非常有效的培訓(xùn)支持和指導(dǎo)活動(dòng),尤其對(duì)于那些經(jīng)驗(yàn)不足的開(kāi)發(fā)人員。CI工具可以提供這些數(shù)據(jù)如何隨著時(shí)間的推移而變化的高層次圖片,還可以關(guān)注開(kāi)發(fā)人員在應(yīng)用他們學(xué)到的技巧時(shí)做得有多好。例如,如果一個(gè)類只有很低的代碼覆蓋率,甚至沒(méi)有,意味著某個(gè)新的開(kāi)發(fā)人員在消化吸收小組培訓(xùn)的測(cè)試驅(qū)動(dòng)開(kāi)發(fā)和測(cè)試實(shí)踐上出現(xiàn)了問(wèn)題。這種方法還可以通過(guò)代碼審查和定期的代碼質(zhì)量會(huì)議(討論任何新問(wèn)題或者動(dòng)向的會(huì)議)完成。
一旦構(gòu)建結(jié)束??自動(dòng)化部署過(guò)程
構(gòu)建應(yīng)用程序只是開(kāi)發(fā)生命周期中的一部分。一旦代碼編譯測(cè)試后,需要進(jìn)行其他的活動(dòng),例如部署到階段性(staging)環(huán)境、冒煙測(cè)試、功能測(cè)試和性能測(cè)試、準(zhǔn)備發(fā)布說(shuō)明和提醒QA人員新的發(fā)布。
將新的構(gòu)建結(jié)果自動(dòng)部署到集成服務(wù)器上是一件相對(duì)簡(jiǎn)單的事情。而將其部署到階段性環(huán)境或者生產(chǎn)環(huán)境下,則需要涉及一些與常規(guī)構(gòu)建作業(yè)不一樣的工作。一般而言你需要一個(gè)更加嚴(yán)格,更加正規(guī)且有更多可跟蹤性和問(wèn)責(zé)的過(guò)程。它通常涉及到的任務(wù)如下:
* 為階段發(fā)布標(biāo)記源代碼
* 編譯測(cè)試應(yīng)用程序
* 發(fā)布構(gòu)建產(chǎn)品
* 將應(yīng)用程序部署到階段性環(huán)境中
* 運(yùn)行數(shù)據(jù)庫(kù)更新腳本或者其他特定環(huán)境腳本
* 運(yùn)行冒煙,功能和性能測(cè)試
* 準(zhǔn)備并發(fā)布產(chǎn)品說(shuō)明
* 提醒關(guān)于新階段發(fā)布的相關(guān)利益人
這通常是一個(gè)手工任務(wù),但是其中的大部分工作沒(méi)有理由不能自動(dòng)化。事實(shí)上,開(kāi)發(fā)生命周期中的自動(dòng)化包裝,部署和發(fā)布具有很穩(wěn)固的商業(yè)意義。一方面自動(dòng)化能夠得到更加可靠的構(gòu)建:計(jì)算機(jī)不會(huì)忘記部署過(guò)程中的某一步,也不會(huì)在發(fā)生測(cè)試失敗后繼續(xù)進(jìn)行。它還能夠節(jié)約開(kāi)發(fā)人員的時(shí)間:階段性發(fā)布由之前幾小時(shí)的 shell腳本編程變?yōu)榱酥灰c(diǎn)擊一下按鈕。它比以前的速度要更快,并且可以在沒(méi)有人的情況下完成工作(例如,通宵或者午休時(shí)間)。
像Maven 2這樣的工具也能夠幫助自動(dòng)化一些步驟。Maven Release插件使得Maven的用戶能夠自動(dòng)化處理一些如“更新版本號(hào)”,“Subversion中新增標(biāo)簽”,以及“向Maven存儲(chǔ)庫(kù)中發(fā)布構(gòu)建產(chǎn)品”的工作。它可以用來(lái)管理階段構(gòu)建,并決定在不同的環(huán)境部署不同的發(fā)布產(chǎn)品。盡管如此,一旦產(chǎn)品構(gòu)建結(jié)束并且可以部署到階段性環(huán)境者生產(chǎn)環(huán)境時(shí),這個(gè)過(guò)程會(huì)變得更復(fù)雜。
千真萬(wàn)確,現(xiàn)實(shí)世界中的部署步驟數(shù)目經(jīng)常要比簡(jiǎn)單的用一個(gè)WAR文件多。根據(jù)應(yīng)用程序架構(gòu)和產(chǎn)品平臺(tái),你可能需要在階段性環(huán)境者生產(chǎn)環(huán)境下的數(shù)據(jù)庫(kù)中運(yùn)行SQL更新腳本、用一個(gè)專用的工具部署web服務(wù)、運(yùn)行自動(dòng)化的冒煙測(cè)試或者做一定量服務(wù)端的工作。
CI可以幫助簡(jiǎn)化比這些還要復(fù)雜的步驟。例如通過(guò)分布式構(gòu)建,你可以設(shè)立階段性環(huán)境或生產(chǎn)環(huán)境上的構(gòu)建代理,并在該機(jī)器上直接運(yùn)行相應(yīng)的任務(wù)。幾乎所有的 現(xiàn)代CI工具都支持相當(dāng)好的安全模型,目的是為了將應(yīng)用和產(chǎn)品環(huán)境限制給一些特定的人,以及跟蹤誰(shuí)在什么時(shí)間運(yùn)行了什么構(gòu)建。
這是CI的一個(gè)相對(duì)較新的應(yīng)用,不同的工具在處理應(yīng)用程序部署時(shí)使用的方法也不一樣。有一些,如Hudson,允許在構(gòu)建作業(yè)中定義多個(gè)步驟,只有當(dāng)前一 個(gè)步驟成功后,才能執(zhí)行后續(xù)步驟。其他的像Cruise和Anthill Pro,都嘗試將部署生命周期中的如階段和生產(chǎn)環(huán)境直接集成到構(gòu)建工具中,盡管有時(shí)候這樣會(huì)帶來(lái)額外的復(fù)雜度開(kāi)銷。
還有更多低層次的操作可以和CI服務(wù)器聯(lián)合起來(lái)使用。一個(gè)選擇是使用諸如Ant或者M(jìn)aven的構(gòu)建工具。Ant對(duì)于這種類型的腳本特別靈活。另一個(gè)流行的選擇是古老的Makefile,或者Unix上的shell腳本。它們的缺點(diǎn)是操作系統(tǒng)相關(guān)的,并且對(duì)于那些不熟悉shell腳本精髓的Java 開(kāi)發(fā)人員來(lái)說(shuō)很難掌握。想要與Java更加友好,可以選擇動(dòng)態(tài)語(yǔ)言諸如Groovy或者Gant(一個(gè)使用Groovy而不是XML來(lái)制作Ant腳本的工具)。 Groovy在提供所有輕量級(jí)的動(dòng)態(tài)腳本語(yǔ)言中所有的優(yōu)點(diǎn)的同時(shí),也保留了對(duì)Java開(kāi)發(fā)人員的熟悉程度和可讀性。
總結(jié)
這些只是使用現(xiàn)代持續(xù)集成環(huán)境完善構(gòu)建過(guò)程和增強(qiáng)團(tuán)隊(duì)的幾個(gè)方法。持續(xù)集成環(huán)境不僅僅是一個(gè)構(gòu)建計(jì)劃表,它還可以用來(lái)幫助打開(kāi)隊(duì)伍內(nèi)部的溝通渠道、保持構(gòu)建過(guò)程平穩(wěn)有效的運(yùn)行、時(shí)刻監(jiān)控代碼質(zhì)量以及自動(dòng)化發(fā)布和部署過(guò)程。
相關(guān)推薦

最新發(fā)布
性能測(cè)試之測(cè)試環(huán)境搭建的方法
2020/7/21 15:39:32軟件測(cè)試是從什么時(shí)候開(kāi)始被企業(yè)所重視的呢?
2020/7/17 9:09:11Android自動(dòng)化測(cè)試框架有哪些?有什么用途?
2020/7/17 9:03:50什么樣的項(xiàng)目適合做自動(dòng)化?自動(dòng)化測(cè)試人員應(yīng)具備怎樣的能力?
2020/7/17 8:57:06幾大市面主流性能測(cè)試工具測(cè)評(píng)
2020/7/17 8:52:11RPA機(jī)器人能夠快速響應(yīng)企業(yè)需求,是怎么做到的?
2020/7/17 8:48:05Bug可以真正消滅嗎?為什么?
2020/7/17 8:43:03軟件測(cè)試基本概念是怎么來(lái)的?軟件測(cè)試生命周期的形成歷經(jīng)了什么?
2020/7/16 9:11:10