天天看點

建立可持續內建系統(Jenkins)

在軟體工程實踐中,需要将開發完成的最終産品傳遞給使用者(或釋出給測試部門),就需要我們将源代碼編譯為可執行檔案。将各個分别開發的子產品集合為一個完整的系統,這個過程成為系統內建,我們用一個系統來描述這個內建過程。

內建系統:輸入指定的軟體資産,輸出根據軟體資産生産出的軟體産品以及其他副産品的系統。

對于一般系統而言(以VC開發為例),軟體的生産過程包括:源碼擷取,源碼檢查,源碼編譯,測試,部署。經曆以上幾個過程之後得到一個可用的系統。

故一般而言內建系統通常會按照順序經曆以下幾個子產品組成:

1. 版本檢查:用于擷取代碼和其他必要的檔案。

2. 源碼檢查:對于源代碼的靜态分析,檢查可能存在的錯誤。

3. 源碼編譯:通過編譯器和連接配接器編譯源檔案,生産可執行檔案或庫。

4. 測試:通過對編譯出來的檔案進行一定測試,并獲得測試結果。

5. 部署:若測試通過則檔案可以作為最終得到的産物用于傳遞。

在實踐過程中軟體的最終內建會存在各種各樣的問題而導緻內建失敗,需要大量的修改和測試,而得到最終可以的傳遞的産品。故每次版本釋出時的加班不可避免,而傳遞的延期也時常發生,軟體的品質不可保證。為了解決這些問題或者說減少修複這些問題所需要付出的成本,我們盡量讓這些問題提早發生(問題越早發生修複的代價越小)。是以我們可以以一定頻率對工程的更改進行內建,若內建失敗則盡早修複,以保證能夠得到可傳遞的産品,這樣的實踐稱為持續內建。

我們可以将系統內建的工作交由項目經理負責,讓項目經理定期內建系統并釋出版本,我們稱之為人肉內建系統:

1. 版本檢查:SVN或者Git工具能夠check out出代碼的工具都可以。

2. 源碼檢查:使用beyondcompare等工具對比原有版本,通過codereview的方式用肉眼對代碼進行檢查,好壞全憑項目經理的經驗。

3. 源碼編譯:VS工程的生成功能,将源代碼編譯,連接配接,生成可執行檔案或庫。

4. 測試:跑完單元測試,對檔案的功能進行測試,或檢查是否功能完備或者bug是否已經得到修複。

5. 部署:将生成的檔案打包傳遞。

人肉內建系統處理了內建最大的問題,通過項目經理以一定頻率反複執行以上過程保證傳遞。但是項目經理的精力完全被消耗在這個重複勞動的過程中,而且品質保證完全取決于項目經理的經驗和能力,并且不能量化結果對于決策的支援有限。以上幾個子產品會被按順序重複執行,若有一定的工具可以自動完成以上子產品的各個功能則可以将項目經理從繁複的重複勞動中解脫出來,大大的節省項目成本。故我們需要建構一個自動持續內建系統來取代人肉內建系統,感謝開源工具讓我們能夠使用自動化的工具完成以上各個子產品的功能,并通過CI工具反複執行,自動內建系統同樣包含一下子產品:

1. 版本檢查:SVN或者Git工具能夠check out出代碼的工具都可以。

2. 源碼檢查:使用cpplint檢查代碼規範,使用cppcheck靜态檢查代碼缺陷,使用cppncss或SourceMonitor分析代碼複雜度。

3. 源碼編譯:通過指令行調用VS工程的生成功能,将源代碼編譯,連接配接,生成可執行檔案或庫。

繼續閱讀