對 Kotlin 這種編譯式語言來說,為了方便每次更新後的編譯工作,都會搭配 Gradle 這種自動建置工具使用。而 Gradle 在編譯的過程中會經過很多手續,這些手續彼此串連相依,若是遇到錯誤或是有效能問題時,其實並不容易除錯,排除問題也很花時間。因此 Gradle 官方提供了 Build Scan 這樣的工具來滿足這個需求。
Build Scan 可以在執行 Build 過程中一併掃描和紀錄所有細節,並將分析報告及運行環境等資訊傳送到 scans.gradle.com 這個服務。這是一個免費的線上服務,每當報告上傳上去後,就會產生一個可被分享的 Build 紀錄,其提供了更多細節資訊,解釋了其中發生了什麼以及為什麼,協助開發者更了解 Build 的細節。
今天我們先用 Gradle 指令來試用一下這個服務,明天再將這個服務套用在 TeamCity 的建置流程上。
要讓 Gradle 執行 Build Scan 並將分析報告傳送到 scans.gradle.com 非常簡單,只要在執行 build
指令時,加上 --scan
參數即可:
$ ./gradlew build --scan
BUILD SUCCESSFUL in 11s
8 actionable tasks: 3 executed, 5 up-to-date
Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no] yes
Gradle Terms of Service accepted.
Publishing build scan...
https://gradle.com/s/g2n2rjorrbvhe
在執行的過程中,Gradle 會詢問您是否同意將資料上傳到 Gradle 主機,並同意他們的使用條款?這時請輸入 yes
,Build Scan 完成後,Gradle 會在畫面上印出本次分析報告的瀏覽位置。
打開瀏覽器輸入 Build Scan 提供的 URL,Gradle Enterprise 會先請您輸入 Email 來將這個 Build Scan 關聯到這個 Email 帳號,設定完成後就會將開通後的連結寄給,請先去收信。
點選 Email 裡的連結就會開發 Build Scan 完整的分析報告。
從畫面上我們可以看到,Build Scan 從 Console Log、Timeline、Performance、Tests、Projects、Dependencies、Build dependencies、Plugins、Switches、Infrastructure 等不同面向提供詳細的報告,比平常在終端機的輸出多更多,而且很多都輔以圖表呈現。若是在檢測效能問題或是除錯時,有這樣的報告相信會很有幫助。
雖然 Build Scan 服務是免費的,但很多開發主管聽到會有資料上傳到第三方主機,而且這個資料還是內部專案建置過程的詳細資料,不免有資料隱私及外洩的疑慮。
根據 Gradle 官方的說明,透過 Build Scan 上傳的資料只能透過當下隨機產生的連結來瀏覽,只要您沒有隨意散佈,基本上不容易被其他人取得。而傳送到 scans.gradle.com 的分析報告假如沒有被瀏覽的話,3 個月後就會被自動刪除。不過一旦 Build Scan 報告被瀏覽過,它就會被永遠留存。當然,您可以在觀看之後依照意願將其刪除,仍有一定的安全性。
當然,最終極的作法就是購買 Gradle Enterprise 方案囉!您可以把 Build Scan 服務架在公司內部,所有資料就只會上傳到自己的主機也只能在內網瀏覽,這樣就不會有資料隱私及外洩的疑慮了。另外,購買 Gradle Enterprise 的另一層意義也是支持 Gradle 團隊能持續貢獻資源在開發及維護 Gradle 專案上。所以若團隊有餘裕的話,購買 Enterprise 是支持開放原始碼專案的最好方法。我們 JetBrains 在內部開發時也有購買 Gradle Enterprise,所有 Build Scan 都可以在內網主機上查到,非常方便。