跳轉到內容

軟體工程/工具/構建工具簡介

來自華夏公益教科書,開放的書籍,為開放的世界

構建自動化是指對軟體開發人員日常工作中執行的各種任務進行指令碼編寫或自動化,包括以下內容:

  • 將計算機原始碼編譯成二進位制程式碼
  • 打包二進位制程式碼
  • 執行測試
  • 部署到生產系統
  • 建立文件和/或發行說明

從歷史上看,開發人員使用構建自動化從構建指令碼內部呼叫編譯器和連結器,而不是嘗試從命令列進行編譯器呼叫。使用命令列將單個源模組傳遞給編譯器,然後傳遞給連結器以建立最終可部署物件非常簡單。但是,當嘗試按特定順序編譯和連結多個原始碼模組時,使用命令列流程不是一個合理的解決方案。make 指令碼語言提供了一個更好的替代方案。它允許編寫一個構建指令碼,以連續呼叫必要的編譯和連結步驟來構建軟體應用程式。GNU Make [1] 還提供了其他功能,例如“makedepend”,它允許進行一些原始碼依賴項管理以及增量構建處理。這是構建自動化的開始。它主要關注的是自動化對編譯器和連結器的呼叫。隨著構建過程變得更加複雜,開發人員開始在對編譯器的呼叫周圍新增預處理和後處理操作,例如從版本控制中檢出到將可部署物件複製到測試位置。現在,“構建自動化”一詞還包括管理預處理和後處理編譯和連結活動,以及編譯和連結活動。

新一代解決方案

[編輯 | 編輯原始碼]

近年來,構建管理解決方案在構建過程的自動化方面提供了更多便利。商業和開源解決方案都可以提供更多自動化的構建和工作流處理。一些解決方案專注於自動化圍繞構建指令碼呼叫進行的預處理和後處理步驟,而另一些解決方案則超越了預處理和後處理構建指令碼處理,深入到簡化實際編譯和連結器呼叫,而無需太多手動指令碼編寫。這些工具對於持續整合構建特別有用,因為這些構建需要頻繁呼叫編譯過程,並且需要增量構建處理。

高階構建自動化

[編輯 | 編輯原始碼]

高階構建自動化為分散式構建和/或分散式處理提供遠端代理處理。術語“分散式構建”是指實際對編譯器和連結器的呼叫可以傳送到多個位置,以提高構建速度。該術語經常與“分散式處理”混淆。分散式處理是指流程或工作流中的每個步驟都可以傳送到不同的機器執行。例如,構建後的步驟可能需要在多臺機器上執行多個測試指令碼。分散式處理可以將不同的測試指令碼傳送到不同的機器。分散式處理不是分散式構建。分散式處理無法獲取 make、ant 或 maven 指令碼,將其分解併發送到不同的機器進行編譯和連結。分散式構建過程必須具備機器智慧,才能理解原始碼依賴關係,以便將不同的編譯和連結步驟傳送到不同的機器。構建自動化解決方案必須能夠管理這些依賴關係才能執行分散式構建。一些構建工具可以以程式設計方式發現這些關係(Rational ClearMake 分散式[2]、Electric Cloud ElectricAccelerator[3]),而另一些則依賴於使用者配置的依賴關係(Platform LSF lsmake[4])能夠整理出原始碼依賴關係的構建自動化也可以配置為以並行模式執行編譯和連結活動。這意味著編譯器和連結器可以使用配置了多個核心的機器以多執行緒模式呼叫。

並非所有構建自動化工具都能執行分散式構建。大多數工具只提供分散式處理支援。此外,大多數支援分散式構建的解決方案只能處理 C 或 C++。支援分散式處理的構建自動化解決方案通常基於 make,並且許多解決方案不支援 Maven 或 Ant。

分散式構建解決方案的示例包括 Xoreax 的 IncrediBuild[5](適用於 Microsoft Visual Studio 平臺)或開源 CMake[6]。這些解決方案可能需要對產品環境進行特定配置,才能在分散式平臺上成功執行,例如庫位置、環境變數等。

  • 提高產品質量
  • 加速編譯和連結處理
  • 消除冗餘任務
  • 最大程度減少“錯誤構建”
  • 消除對關鍵人員的依賴
  • 擁有構建和釋出的歷史記錄,以便調查問題
  • 節省時間和金錢 - 由於上述原因。[7]
  • 按需自動化,例如使用者在命令列執行指令碼
  • 計劃自動化,例如持續整合伺服器執行夜間構建
  • 觸發自動化,例如持續整合伺服器在每次提交到版本控制系統時執行構建。

構建自動化的一種特定形式是自動生成 Makefile。這可以透過以下工具實現:

  • GNU Automake
  • CMake
  • imake
  • qmake
  • nmake
  • wmake
  • Apache Ant
  • Apache Maven
  • OpenMake Meister

構建系統的要求

[編輯 | 編輯原始碼]

基本要求

  1. 頻繁或夜間構建,以便及早發現問題。[8][9][10]
  2. 支援原始碼依賴項管理
  3. 增量構建處理
  4. 提供跟蹤源到二進位制匹配的報告
  5. 構建加速
  6. 提取和報告構建編譯和連結使用情況

可選要求:[11]

  1. 生成發行說明和其他文件,例如幫助頁面
  2. 構建狀態報告
  3. 測試透過或失敗報告
  4. 每個新構建中新增、修改或刪除的功能摘要

參考資料

[編輯 | 編輯原始碼]
  1. http://www.gnu.org/software/make/
  2. Dr. Dobb's Distributed Loadbuilds,檢索於 2009-04-13
  3. Dr. Dobb's Take My Build, Please
  4. LSF User's Guide - Using lsmake,檢索於 2009-04-13
  5. Distributed Visual Studio Builds,檢索於 2009-04-08
  6. CMake - Cross platform make,檢索於 2010-03-27
  7. http://www.denverjug.org/meetings/files/200410_automation.pdf
  8. http://freshmeat.net/articles/view/392/
  9. http://www.ibm.com/developerworks/java/library/j-junitmail/
  10. http://buildbot.net/trac
  11. http://www.cmcrossroads.com/content/view/12525/120/
註釋
華夏公益教科書