實戰Gradle——第1章 專案自動化介紹
本章內容
- 瞭解專案自動化的好處
- 瞭解不同的專案自動化
- 瞭解構建工具的特點和結構
- 探索構建工具實現的利弊
1.1 沒有專案自動化的日子
- IDE完成大部分工作。開發人員用IDE編寫程式碼、瀏覽程式碼、實現新功能、編譯程式碼、重構程式碼、單元測試、整合測試,每當有新的程式碼改動,開發人員需要按下編譯按鈕,如果IDE沒有報錯並測試通過,開發人員會把程式碼提交到版本控制倉庫,其他人員就可以從倉庫中拉程式碼使用啦。IDE是非常強大的開發工具,但是要完成以上提到的任務,卻有個問題,那就是每個開發人員需要安裝配置一套IDE工具,而且還要注意編譯、執行環境以及工具的版本等問題。
- 程式碼只在我的機器上工作?我們會經常遇到這麼一個場景,我們從版本倉庫拉下一份程式碼去編譯執行,不幸的是編譯報錯,通過錯誤資訊定位問題,原來是另一個開發人員忘記提交了一個程式碼檔案。
- 整合測試是一場災難。前端和後臺按照計劃進度各自完成開發任務,可等將專案整合部署到測試環境,之前的歡呼聲迅速消失——前端和後臺整合後,功能無法正常執行。
- 版本測試低效。每一次開發人員向QA交付測試版本時,都會出現以下重複場景:每個開發人員都將程式碼提交,然後將最新程式碼拉到本地,用IDE構建專案然後向QA交付測試版本(如果上天保佑,這期間不會出現問題),隨後QA會經過數週的艱辛測試。
- 部署成功不易。部署專案,必須要配置基礎架構和執行時環境,資料庫中要準備種子資料,監測專案的執行狀態等等,雖然這一系列操作都有計劃可依,但都是通過手動操作來完成的,這就引入了不可預知的問題。
1.2 專案自動化的優勢
專案自動化取代了簡單、重複的手動操作,提高部署、釋出效率,杜絕人為錯誤,改進了開發的工作流程。
1.2.1 阻止手動干預
手動執行生產和交付軟體的過程即耗時也容易出錯,軟體開發過程中的任何一個步驟都可以且應該自動化。
1.2.2 取代重複的手動操作
軟體的構建其實遵循一個預定義的有序的步驟,自動化構建通過指令碼來定義這些步驟,如果有人需要執行這些步驟,只需像點選一個按鈕那麼簡單,即可獲取到執行結果。
1.2.3 使構建便攜
自動化構建不需要特定的作業系統或特定IDE才能工作,自動化構建是可執行的命令列,它允許你在任何你想要的機器上執行構建。
1.3 專案自動化型別
可以按需自動化構建專案,也可以在特定時間或某個事件發生時去構建。
1.3.1 按需構建
典型場景使用者在自己的機器上觸發構建,VCS管理構建定義和原始碼檔案,這種構建一天中一般會執行多次。
1.3.2 觸發構建
如果你想及時、快速瞭解專案的健康狀態反饋,瞭解你的原始碼編譯有沒有錯誤或者單元測試有沒有沒有失敗,那麼觸發構建是你最好的選擇。
1.3.3 計劃構建
在特定的時間間隔或特定時間點構建。
觸發構建和計劃構建通常被稱為持續整合(CI)
1.4 構建工具
1.4.1 什麼是構建工具
構建工具以可執行的、有序的任務(task)來表達你的自動化需求,每個任務就是一個工作單元。
有向無環圖(Directed Acyclic Graph)
任務以及它們之間的依賴可以用有向無環圖來描述(有向無環圖常常被用來表示事件之間的驅動以來關係,管理任務之間的拓度),有向無環圖有兩個要素:
- 節點:即構建工具的任務。
- 有向邊:表示節點之間的關係,即構建工具的依賴。如果一個任務依賴其他一些任務,那麼在執行這個任務之前,要先執行那些依賴任務,因為這個任務的執行依賴其他任務的輸出。
每個節點都知道自己的執行狀態,節點(任務)只能執行一次。
1.4.2 構建工具解析
構建工具中有幾個主要的構建元件,我們需要掌握每個元件的職責以及它們之間的互動機制。
構建檔案
構建檔案包含構建所需的配置,定義外部依賴(如第三方庫依賴),還包括實現某個特定目標的模組說明,這個說明是以任務及任務之間的依賴來表示的。
構建的輸入和輸出
某些任務會接收一個輸入,然後執行一系列步驟,產生一個輸出;某些任務也許不需要輸入,也不產生輸出;而一個在複雜依賴關係中的任務,有可能會使用它依賴任務的輸出作為它的輸入。
構建引擎
構建引擎在執行時處理構建檔案,解析任務依賴,設定好執行所需的全部配置,將構建檔案翻譯成構建工具能夠理解的內部模型;而一旦內模建好,引擎就會按照按照順序去執行一系列任務。
依賴管理器
依賴管理器用於處理你在build檔案中宣告定義的依賴,從依賴倉庫中將依賴的庫拉到你的專案中使用(這裡的依賴只的是外部依賴)。依賴倉庫可以使HTTP伺服器或者本地檔案系統。
1.5 Java構建工具
1.5.1 Apache Ant
1.5.2 Apache Maven
1.5.3 下一代構建工具Gradle
轉載於:https://my.oschina.net/kun123/blog/847979