1. 程式人生 > 實用技巧 >實戰Gradle——第1章 專案自動化介紹

實戰Gradle——第1章 專案自動化介紹

>>> hot3.png

本章內容

  • 瞭解專案自動化的好處
  • 瞭解不同的專案自動化
  • 瞭解構建工具的特點和結構
  • 探索構建工具實現的利弊

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管理構建定義和原始碼檔案,這種構建一天中一般會執行多次。

160200_UFRs_2832792.png

1.3.2 觸發構建

如果你想及時、快速瞭解專案的健康狀態反饋,瞭解你的原始碼編譯有沒有錯誤或者單元測試有沒有沒有失敗,那麼觸發構建是你最好的選擇。

162259_yrSj_2832792.png

1.3.3 計劃構建

在特定的時間間隔或特定時間點構建。

163629_iWRR_2832792.png

觸發構建和計劃構建通常被稱為持續整合(CI)

1.4 構建工具

1.4.1 什麼是構建工具

構建工具以可執行的、有序的任務(task)來表達你的自動化需求,每個任務就是一個工作單元。

有向無環圖(Directed Acyclic Graph)

任務以及它們之間的依賴可以用有向無環圖來描述(有向無環圖常常被用來表示事件之間的驅動以來關係,管理任務之間的拓度),有向無環圖有兩個要素:

  • 節點:即構建工具的任務。
  • 有向邊:表示節點之間的關係,即構建工具的依賴。如果一個任務依賴其他一些任務,那麼在執行這個任務之前,要先執行那些依賴任務,因為這個任務的執行依賴其他任務的輸出。

每個節點都知道自己的執行狀態,節點(任務)只能執行一次。

174916_iFis_2832792.png

1.4.2 構建工具解析

構建工具中有幾個主要的構建元件,我們需要掌握每個元件的職責以及它們之間的互動機制。

構建檔案

構建檔案包含構建所需的配置,定義外部依賴(如第三方庫依賴),還包括實現某個特定目標的模組說明,這個說明是以任務及任務之間的依賴來表示的。

構建的輸入和輸出

某些任務會接收一個輸入,然後執行一系列步驟,產生一個輸出;某些任務也許不需要輸入,也不產生輸出;而一個在複雜依賴關係中的任務,有可能會使用它依賴任務的輸出作為它的輸入。

構建引擎

構建引擎在執行時處理構建檔案,解析任務依賴,設定好執行所需的全部配置,將構建檔案翻譯成構建工具能夠理解的內部模型;而一旦內模建好,引擎就會按照按照順序去執行一系列任務。

220013_Lp1P_2832792.png

依賴管理器

依賴管理器用於處理你在build檔案中宣告定義的依賴,從依賴倉庫中將依賴的庫拉到你的專案中使用(這裡的依賴只的是外部依賴)。依賴倉庫可以使HTTP伺服器或者本地檔案系統。

220222_GLdc_2832792.png

1.5 Java構建工具

1.5.1 Apache Ant

參考網址:http://ant.apache.org/

1.5.2 Apache Maven

參考地址:http://maven.apache.org/

1.5.3 下一代構建工具Gradle

轉載於:https://my.oschina.net/kun123/blog/847979