iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0

眾所皆知 Gradle 是一個 Build Tool。對於編譯式語言來說,編譯過程會經過很多手續,這些手續彼此串連相依,若是遇到錯誤或是有效能問題時,其實並不容易除錯,排除問題也很花時間。這時,就需要更專業的工具來協助我們。

Gradle 官方提供了 Build Scan 這樣的工具來滿足這個需求。Build Scan 可以在執行 Build 過程中一併掃描和紀錄所有細節,並將分析報告及運行環境等資訊傳送到 scans.gradle.com 這個服務。這是一個免費的線上服務,每當報告上傳上去後,就會產生一個可被分享的 Build 紀錄,其提供了更多細節資訊,解釋了其中發生了什麼以及為什麼,協助開發者更了解 Build 的細節。今天我們就來體驗並測試一下這個服務。

執行 Build Scan

要讓 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 會在畫面上印出本次分析報告的瀏覽位置。點一下這個 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 會在中途停下來問你是否同意上傳資料及使用條款,然後我們需要手動輸入 yes 才有辦法繼續進行。這在本機測試沒什麼問題,反正我們本來就在電腦前可以跟指令互動。但當這個動作是在 CI 主機上執行時,就會造成動作中途且無法繼續完成。

這時我們可以在 settings.gradle.kts 裡設定安裝 Gradle Enterprise Plugin,並預設同意使用條款:

plugins {
    `gradle-enterprise`
    // 或是寫
    // id("com.gradle.enterprise") version "3.7"
}
gradleEnterprise {
    buildScan {
        termsOfServiceUrl = "https://gradle.com/terms-of-service"
        termsOfServiceAgree = "yes"
    }
}

這樣在 CI 主機上就不會被中斷了。有興趣的朋友可以在 TeamCity 上試試看,不熟 TeamCity 的話,可以參考筆者的另一個鐵人賽 《DevOps 萌新的 TeamCity 極速上手寶典》 ,歡迎多多支持!

上傳 Build 資料的疑慮

雖然 Gradle 的 Build Scan 服務是免費的,但許多人一聽到會有資料上傳到第三方主機,而且這個資料還是自己專案建置過程的詳細資料,不免有資料隱私及外洩的疑慮。

根據 Gradle 官方的說明,透過 Build Scan 上傳的資料只能透過當下隨機產生的連結來瀏覽,只要您沒有被隨意散佈,基本上不容易被其他人取得。而傳送到 scans.gradle.com 的分析報告假如沒有被瀏覽的話,3 個月後就會被自動刪除。不過一旦 Build Scan 報告被瀏覽過,它就會被永遠留存。當然, 您也可以在觀看之後依照意願將其刪除,仍有一定的安全性。

當然,最終極的作法就是購買 Gradle Enterprise 方案囉!您可以把 Build Scan 服務架在公司內部,所有資料就只會上傳到自己的主機也只能在內網瀏覽,這樣就不會有資料隱私及外洩的疑慮了。當然,購買 Gradle Enterprise 的另一層意義也是支持 Gradle 團隊能持續貢獻資源在開發及維護 Gradle 專案上。所以若是公司有餘裕的話,筆者覺得是個支持開放原始碼專案最好的一種方式。我們 JetBrains 也有購買 Gradle Enterprise,所有 Build Scan 都可以在內網主機上查到,非常方便。

參考資料


上一篇
第十三天:初探 Gradle Build Script
下一篇
第十五天:初探 Gradle properties
系列文
Gradle 通靈術24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言