使用 Jenkins 的頂尖工程團隊,透過使用 Gradle 建置快取,已能將 CI 建置時間縮短多達 90%。在此註冊我們的建置快取訓練課程,瞭解您的團隊如何達成類似的成果。

建立 Gradle 專案並不僅止於開發人員的電腦。持續整合 (CI) 是一種長久以來的做法,用於執行對提交至版本控制的每一項變更的建置,以縮短回饋迴路。

在本指南中,我們將討論如何針對典型 Gradle 專案設定 Jenkins

您需要準備的內容

  • 文字編輯器

  • 命令提示字元

  • Java 開發套件 (JDK),版本 1.7 或更高

  • Jenkins 安裝(設定步驟說明於此文章中)

設定典型專案

舉例來說,本指南將專注於基於 Java 的專案。更具體來說,是以 Java 編寫並使用 Spek 進行測試的 Gradle 外掛程式。首先,我們將在您的本機電腦上設定專案,然後再於 CI 上執行相同的步驟。

只要按照下列步驟操作即可

複製 Gradle Site Plugin 儲存庫

$ git clone https://github.com/gradle/gradle-site-plugin.git
Cloning into 'gradle-site-plugin'...
$ cd gradle-site-plugin

建立專案

作為 Java 專案的開發人員,您通常會想要編譯原始碼、執行測試並組裝 JAR 產出。對於 Gradle 外掛程式來說,做法並無不同。下列指令可達成此目的

$ ./gradlew build

BUILD SUCCESSFUL
14 actionable tasks: 14 executed

此專案提供 Gradle Wrapper 作為儲存庫的一部分。建議將其用於任何 Gradle 專案,因為它讓您的專案可以在 CI 中建置,而無需安裝 Gradle 執行時間。

建置掃描整合

範例專案配備了產生 建置掃描 的支援。使用命令列選項 --scan 執行建置會在主控台中呈現一個連結。

$ ./gradlew build --scan

Publishing build scan...
https://gradle.com/s/7mtynxxmesdio

以下部分將說明如何使用 Jenkins 建置專案。

設定 Jenkins

Jenkins 是此領域最著名的參與者之一。在本部分中,您將學習如何設定 Jenkins、設定工作以從 GitHub 拉取原始程式碼並執行 Gradle 建置。

安裝並啟動 Jenkins

Jenkins 網站 上,您可以從各種發行版中進行選擇。這篇文章使用可執行 WAR 檔案。一個簡單的 Java 指令會啟動 Jenkins 伺服器。

$ wget https://mirrors.jenkins.io/war-stable/latest/jenkins.war
$ java -jar jenkins.war

在瀏覽器中,導覽至連接埠 8080localhost 以呈現 Jenkins 儀表板。系統會要求您設定新的管理員使用者和要安裝的外掛程式。

安裝外掛程式

首次啟動 Jenkins 時,確認安裝建議的外掛程式。在「管理 Jenkins > 管理外掛程式」中,確保您已安裝以下兩個外掛程式。

接下來,我們可以設定建置專案的工作。

建立 Jenkins 工作

設定新的 Gradle 工作只需按幾下即可完成。從左側導覽列中,選取「新增項目 > 自由風格專案」。為專案輸入新的名稱。我們將為專案選取「gradle-site-plugin」。

在「原始程式碼管理」部分中,選取無線電按鈕「Git」。輸入 GitHub 儲存庫的網址:https://github.com/gradle/gradle-site-plugin.git

jenkins scm

此外,在「建置」區段中,透過選擇「呼叫 Gradle 腳本」來建立「建置步驟」。如前所述,我們將使用 Wrapper 來執行建置。在「任務」輸入方塊中,輸入 build,並使用「開關」--scan -s 來產生建置掃描,並在建置失敗時呈現堆疊追蹤。

jenkins build step

執行工作

儲存工作設定,並透過觸發「立即建置」按鈕來執行初始建置。建置應順利完成,並呈現「Gradle 建置掃描」圖示,可直接帶您前往給定建置的 建置掃描

jenkins build scan

有各種選項可持續觸發 Jenkins 建置:從定期輪詢儲存庫、根據設定的排程建置,或透過回呼 URL。

摘要

在 CI 上執行 Gradle 建置只需幾個步驟即可設定和組態。快速收到回饋的優點顯而易見。如果您沒有使用 Jenkins,也沒問題,許多 CI 產品都將 Gradle 緊密整合為一級公民。