現(xiàn)今,人們的生活習慣發(fā)生了翻天覆地的變化,一邊在高呼擁抱互聯(lián)網(wǎng),一邊又在痛斥它給人們帶來便捷生活的時候自己沒有趕上創(chuàng)業(yè)潮流,中國人的人群效應恰巧對應了這點:“我看不慣你,又干不掉你”,最后就只能臣服于互聯(lián)網(wǎng)的驅(qū)動下。默默收起淚眼婆娑的羨慕,轉(zhuǎn)戰(zhàn)這個怪圈。傳統(tǒng)的IT部署依然滿足不了這個時代的需求,云計算的出現(xiàn),更使得企業(yè)轉(zhuǎn)型迫在眉睫。
新致云開發(fā)團隊順應自動化的時代潮流,結(jié)合敏捷開發(fā)、持續(xù)集成、持續(xù)部署等先進理論在團隊協(xié)作領(lǐng)域掀起了全新的自動化浪潮。早期新致云項目組的團隊協(xié)作依賴于較多的人工操作,而人工操作的缺點顯而易見,溝通信息的失真、重復繁瑣的勞動都造成了大量時間成本的浪費以及作業(yè)效率的降低。引入自動持續(xù)集成的概念后,開發(fā)和測試人員可以解放大量的人力勞動。不僅使得代碼的質(zhì)量可以得到更好的保障,在部署和監(jiān)控方面也可以做到更加人性化和可視化。本編著重探討持續(xù)集成中自動化代碼質(zhì)量檢測。
代碼質(zhì)量門——SonarQube
試想一下:一個開發(fā)團隊如何在人員持續(xù)流動且不穩(wěn)定的情況下,快速交接現(xiàn)有代碼?如何保證寫下的代碼沒有潛在的問題和技術(shù)債務?顯然,良好的代碼規(guī)范和質(zhì)量審查必不可少。SonarQube是一款優(yōu)秀的開源代碼管理平臺,可以進行持續(xù)的代碼分析和代碼質(zhì)量檢測,幫助開發(fā)人員發(fā)現(xiàn)邏輯問題之外的技術(shù)BUG和潛在的隱患。
除此之外,自動化則將SonarQube的分析過程以自動化的方式執(zhí)行,同時依托Jenkins自動化服務管理,使得我們可以針對開發(fā)團隊開發(fā)出一整套代碼測試與質(zhì)量分析的產(chǎn)品。使用者完全不必關(guān)心測試環(huán)節(jié)的具體過程和繁瑣的配置,只需要關(guān)心測試的結(jié)果即可。
基于這種情況,自動化集成在團隊敏捷開發(fā)的要求下顯得尤為重要,開發(fā)人員每天都要交付功能代碼以響應快速迭代的需求,若代碼質(zhì)量完全依靠人工則會使得工作量過于龐大,造成開發(fā)壓力,如果使用這一套自動化流程可以大幅提高開發(fā)人員的交付能力。
工作環(huán)境:
以分布式版本控制的工作模型為例,項目代碼由中央和分支倉庫管理。中央倉庫由項目擁有者維護,開發(fā)者拷貝中央倉庫并創(chuàng)建自己的個人分支,在個人分支上進行工作,階段工作完成之后向開發(fā)分支(假如叫做dev分支)中央庫以Pull Request的方式合并代碼。
Pull Request(PR):
開發(fā)人員請求代碼擁有者“pull”有變動的代碼,代碼擁有者可以對貢獻的源碼進行review,并決定是否合并到中央庫的主分支(在git中通常是master分支)。代碼開發(fā)人員創(chuàng)建PR來通知項目擁有者代碼變更,有些服務如Github,Bitbucket,Gitlab提供了PR的評論功能。評論可以作為觸發(fā)測試的條件,也可以作為測試結(jié)果的展示。
說了那么多的自動化集成的工作,很多開發(fā)工程師也許還在疑惑,我們現(xiàn)在的敏捷開發(fā)已經(jīng)深入到各大行業(yè),但是如何檢驗所屬的工作環(huán)境是優(yōu)質(zhì)的呢?
工作流程:
依托Jenkins自動化服務管理,開發(fā)者可以在早晨上班時將代碼更新至dev分支的最新提交,并在一天的開發(fā)完成后在代碼管理工具Github,Bitbucket,Gitlab上創(chuàng)建PR,這個過程會觸發(fā)Jenkins的任務。該任務會拉取PR中源分支的最新的代碼執(zhí)行編譯、單元測試以及代碼分析,之后發(fā)送報告郵件給代碼提交者和代碼擁有者,并且將Jenkins的構(gòu)建結(jié)果作為一條評論創(chuàng)建到PR中,代碼擁有者來決定是否合并。
操作流程(以Stash為例):
插件:
1.stash中需要安裝Bitbucket Server Webhook for Jenkins插件。用于在代碼提交之后觸發(fā)Jenkins Job的構(gòu)建操作。
2.Jenkins中需要安裝SonarQube Plugin。用于在代碼構(gòu)建之后進行分析。
3.Jenkins中安裝Stash pullrequest builder plugin。用于監(jiān)聽pull-request中源分支的變化,并構(gòu)建該分支。
步驟
1. 在Jenkins中建立兩個job,一個是構(gòu)建job,另一個是郵件Job。
2. 配置Stash pullrequest builder plugin。實現(xiàn)當pull-request中的源分支發(fā)生變化(有代碼提交)時,Jenkins自動觸發(fā)該build。
3. Build流程:在buildjob中拉取代碼。通過git命令獲得代碼提交者的郵件,提交時間等。存入公共文件。文件規(guī)則可以自行擬定。(遇到Jenkins存在節(jié)點的情況,可以使用NFS掛載的方式實現(xiàn)文件共享。)
4. build項目,并使用SonarQube進行代碼分析。分析結(jié)果會輸出在Jenkins控制臺。
5. 在emailjob中,讀取公共配置文件。讀取收件人信息,郵件標題,Jenkins任務名,構(gòu)建號等。通過Jenkins CLI讀取上一步中控制臺的內(nèi)容,提取相關(guān)信息作為郵件正文。
6. 發(fā)送郵件。
7. jenkins向stash返回構(gòu)建結(jié)果和連接,作為pull-request的一條評論,供leader審核。由leader審核代碼并決定是否合并代碼。
總的來說,在項目中,開發(fā)人員會遇到各種各樣的問題,自動化集成在項目開發(fā)中和應用中越來越重要,既減輕了開發(fā)難度,又提高了項目交付能力,從產(chǎn)品需求出發(fā),利用自動化管理流程,使得敏捷開發(fā)優(yōu)勢最大化。