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