當(dāng)我們討論Jenkins文件結(jié)構(gòu)的時(shí)候,要知道在基于像Jenkins這樣的圖形用戶界面工具和DevOps的基礎(chǔ)設(shè)施即代碼原則之間經(jīng)常會發(fā)生阻抗失配(impedance mismatch)。
中培的龔老師認(rèn)為,理解這個(gè)問題的一種方法是:雖然Jenkins任務(wù)描述器基于文本文件,但它們并不是改變?nèi)蝿?wù)描述的主要界面,web界面才是。這種方式利弊參半。
Jenkins的既存構(gòu)建之上創(chuàng)建定制的解決方案很容易,并不要求你非常熟悉Jenkins。 另一方面,Jenkins的開箱即用缺乏我們在程序世界中常用的許多功能。例如繼承甚至定義函數(shù)這樣的基本功能在Jenkins里需要大量工作。
GitLab的構(gòu)建服務(wù)器功能,用的是另一種方法。構(gòu)建描述器從一開始就只是代碼。如果并不需要Jenkins提供的所有能力,GitLab的這個(gè)特性值得你一看。
按依賴順序構(gòu)建
因?yàn)闃?gòu)建的一部分可能會依賴于其他部分,許多構(gòu)建工具都有構(gòu)建樹的概念:為完成構(gòu)建而有順序地構(gòu)建依賴。
在像Maven這樣的工具里,構(gòu)件圖來源于由我們?yōu)楣ぜO(shè)置的依賴。另一個(gè)Java構(gòu)建工具Gradle,也會在構(gòu)建之前先創(chuàng)建一個(gè)構(gòu)件圖。
Jenkins支持在web界面上可視化Maven的構(gòu)建順序,在Maven術(shù)語里稱為反應(yīng)器(reactor)。可惜,這個(gè)界面并不支持Make類型的構(gòu)建。
構(gòu)建階段
Maven構(gòu)建工具的主要優(yōu)勢就是它把構(gòu)建流程標(biāo)準(zhǔn)化了。
這一點(diǎn)對大型企業(yè)來說非常有幫助,因?yàn)樗恍枰侔l(fā)明自己的構(gòu)建標(biāo)準(zhǔn)了。其他的
構(gòu)建工具實(shí)現(xiàn)各種構(gòu)建流程一般更加隨意。Maven的嚴(yán)苛有好有壞。有時(shí),剛開始用Maven的人們會懷念像Ant那樣工具所帶來的自由。
你可以用任何工具來實(shí)現(xiàn)這些構(gòu)建,但是當(dāng)工具本身不強(qiáng)迫構(gòu)建、測試和部署的標(biāo)準(zhǔn)順序時(shí),很難還能保持習(xí)慣。
我們就應(yīng)該注意的是,測試階段是非常重要的。持續(xù)集成服務(wù)器需要在捕捉錯(cuò)誤方面表現(xiàn)出色,而自動化測試是實(shí)現(xiàn)這個(gè)目標(biāo)的關(guān)鍵。
可選的構(gòu)建服務(wù)器
雖然以我的經(jīng)驗(yàn)來看,Jenkins在構(gòu)建服務(wù)器上是絕對的主流,但是它絕非不可替代。
Travis CI是一個(gè)托管方案,流行在開源項(xiàng)目中。Buildbot是一個(gè)用Python編寫和配置的構(gòu)建服務(wù)器。ThoughtWorks出品的Go服務(wù)器是另外一種可選方案。Atlassian提供了Bamboo。GitLab現(xiàn)在也支持構(gòu)建服務(wù)器功能了。
當(dāng)評估不同的方案時(shí),留意不要被供應(yīng)商套牢( vendor lock-in)了。也要記住構(gòu)建服務(wù)器并不會取代那些已經(jīng)在本地開發(fā)機(jī)上表現(xiàn)良好的構(gòu)建需求。
還有一個(gè)經(jīng)驗(yàn)法則:看看工具是否可以通過配置文件來配置。雖然管理人員容易被圖形化配置所打動,但是開發(fā)和運(yùn)營人員不會喜歡被要求使用一個(gè)只能通過圖形用戶界面配置的工具。
校驗(yàn)質(zhì)量指標(biāo)
構(gòu)建服務(wù)器的一個(gè)用途是校驗(yàn)軟件質(zhì)量指標(biāo)。Jenkins對此有一些內(nèi)置的支持。可以在一個(gè)任務(wù)頁面上執(zhí)行并可視化Java的單元測試。
另一個(gè)更高級的可選方案是使用Sonar代碼質(zhì)量可視化器,參見下圖。Sonar測試在構(gòu)建階段運(yùn)行并傳送到Sonar服務(wù)器上,在那里進(jìn)行存儲和可視化。
一臺Sonar服務(wù)器是一個(gè)讓開發(fā)團(tuán)隊(duì)看到他們努力改良代碼庫的成果的好辦法。
Sonar服務(wù)器的缺點(diǎn)是有時(shí)會減緩構(gòu)建速度。建議每天夜里運(yùn)行一次Sonar構(gòu)建。
構(gòu)建服務(wù)器制造了大量可以顯示在公共顯示器上的數(shù)據(jù)。若是構(gòu)建失敗的時(shí)候能夠立即察覺,就會有很大幫助。
第一步僅僅是連接一個(gè)類似資訊站( kiosk-like)那樣的顯示器,有一個(gè)web瀏覽器指向你構(gòu)建服務(wù)器的web界面。Jenkins有許多插件可以為資訊站顯示提供簡化的任務(wù)概覽。它們有時(shí)被稱為信息輻射體( Xnformation rzadiators)。
連接構(gòu)建狀態(tài)到其他類型的硬件上也很常見,例如熔巖燈或者多彩LED燈。
以我的經(jīng)驗(yàn)來看,這種類型的顯示可以讓人們對構(gòu)建服務(wù)器充滿興趣。盡管保持長期使用比開始擁有更加困難。如果你想把屏幕放到一個(gè)不容易被看到的地方以避免分心,那么做這件事就變得毫無意義了。
慎重放置熔巖燈和屏幕的組合非常有幫助。熔巖燈并不常亮,所以沒那么吸引人。當(dāng)一個(gè)構(gòu)建失敗發(fā)生時(shí),它亮起來了,于是你就知道你應(yīng)該看一看構(gòu)建信息輻射體了。熔巖燈甚至能夠表達(dá)構(gòu)建質(zhì)量的歷史記錄。當(dāng)熔巖燈亮的時(shí)候,它會發(fā)熱,過一會兒,熔巖在燈里環(huán)繞。當(dāng)錯(cuò)誤被修復(fù),燈冷卻了,但是熱量還會存在一小段時(shí)間,所以熔巖還會環(huán)繞一段時(shí)間,視修復(fù)構(gòu)建錯(cuò)誤的耗時(shí)而定。
想了解更多IT資訊,請?jiān)L問中培偉業(yè)官網(wǎng):中培偉業(yè)