建構、測試及容器化 Java 應用程式

本頁說明如何使用 Cloud Build 建構、測試及容器化以 Java 為基礎的應用程式,將容器映像檔上傳至 Artifact Registry,以及產生建構作業來源資訊。

事前準備

使用 mavengradle 圖片

您可以設定 Cloud Build,使用 Docker Hub 中的 maven 映像檔gradle 映像檔建構 Java 應用程式。

maven

如要在 maven 映像檔中執行工作,請在建構設定中新增步驟,並填寫下列欄位:

  • name:將這個欄位的值設為 mavenmaven:<tag>,其中標記代表版本。如未指定映像檔標記,Cloud Build 預設會使用 latest 映像檔。
  • entrypoint:設定這個欄位會覆寫 name 中參照的映像檔預設進入點。將這個欄位的值設為 mvn,即可將 mvn 叫用為建構步驟的進入點,並執行 mvn 指令。
  • args:建構步驟的 args 欄位會取得引數清單,並將其傳送至 name 欄位參照的映像檔。

下列建構步驟會指定標記為 3.3-jdk-8maven 映像檔 entrypoint,並列印建構工具版本:

steps:
- name: maven:3.3-jdk-8
  entrypoint: mvn
  args: ['--version']

gradle

如要在 gradle 映像檔中執行工作,請在建構設定中新增步驟,並填寫下列欄位:

  • name:將這個欄位的值設為 gradlegradle:<tag>,其中標記代表版本。如未指定映像檔標記,Cloud Build 預設會使用 latest 映像檔。
  • entrypoint:設定這個欄位會覆寫 name 中參照的映像檔預設進入點。將這個欄位的值設為 gradle,即可將 gradle 叫用為建構步驟的進入點,並執行 gradle 指令。
  • args:建構步驟的 args 欄位會取得引數清單,並將其傳送至 name 欄位參照的映像檔。

下列建構步驟會指定標記為 5.6.2-jdk8gradle 映像檔 entrypoint,並列印建構工具版本:

steps:
- name: gradle:5.6.2-jdk8
  entrypoint: gradle
  args: ['--version']

設定 Java 版本

  1. 在專案根目錄中,建立名為 cloudbuild.yaml 的建構設定檔。

  2. 執行測試mavengradle 會提供 maven testgradle test,下載依附元件、建構應用程式,並執行原始碼中指定的任何測試。建構步驟的 args 欄位會取得引數清單並將其傳送至 name 欄位參照的映像檔。

    在建構設定檔中,將 test 新增至 args 欄位,以在 mavengradle 中叫用 test

    maven

    steps:
    - name: maven:3.3-jdk-8
      entrypoint: mvn
      args: ['test']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['test']
    
  3. 封裝應用程式:如要將應用程式封裝至 maven 映像檔的 JAR 檔案,請在 args 欄位中指定 package 指令。package 指令會在 /workspace/target/ 中建構 JAR 檔案。

    如要將應用程式封裝至 gradle 映像檔的 JAR 檔案,請在 args 欄位中指定 assemble 指令。assemble 指令會在 workspace/build/libs 中建構 JAR 檔案。

    下列建構步驟會封裝 Java 應用程式:

    maven

    steps:
    - name: maven:3.3-jdk-8
      entrypoint: mvn
      args: ['package','-Dmaven.test.skip=true']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['assemble']
    
  4. 將應用程式容器化:Cloud Build 提供預先建構的 Docker 映像檔,可用於將 Java 應用程式容器化。如要將 Java 應用程式容器化,請在建構設定檔中執行下列操作:

    • 新增 name 欄位,並在 gcr.io/cloud-builders/docker 指定預先建構的 Docker 映像檔。
    • 新增 args 欄位,並指定 build 引數,包括要建構的容器映像檔名稱,以及建構構件的路徑。
    • 新增 images 欄位,將建構的容器映像檔推送至 Artifact Registry。
    • 選用:在建構設定檔的 options 欄位中新增 requestedVerifyOption: VERIFIED,啟用軟體構件供應鏈級別 (SLSA) 來源產生功能。

    下列建構步驟會將應用程式容器化、將容器映像檔推送至 Artifact Registry,並產生建構作業來源資訊:

    maven

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=target/build-artifact', '.']
    images: ['location-docker.pkg.dev/project-id/repository/image']
    

    gradle

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=build/libs/build-artifact', '.']
    images: ['location-docker.pkg.dev/project-id/repository/image']
    

    其中:

    • location:存放區的區域或多區域位置。
    • project-id:專案的 ID。 Google Cloud
    • repository:Artifact Registry 存放區的名稱。
    • image:容器映像檔的名稱。
    • build-artifact:從建構步驟建立的 JAR 檔案名稱。
  5. 啟動建構作業:準備好建構設定檔後,請在終端機中輸入下列指令,啟動建構作業:

    gcloud builds submit --region=REGION --config config-file-path source-directory
    

    其中:

    • config-file-path:建構設定檔的路徑。在本範例中,建構設定檔名為 cloudbuild.yaml
    • source-directory:原始碼的路徑或網址。
    • REGION支援的建構區域之一。

    如果您未在 gcloud builds submit 指令中指定 config-file-pathsource-directory,Cloud Build 會假設設定檔和原始碼位於目前的工作目錄中。config-file-pathsource-directory

    建構作業完成後,您可以在 Artifact Registry 中查看存放區詳細資料

    您也可以查看建構作業來源資訊中繼資料,以及驗證來源資訊

程式碼範例

以下是一些範例存放區,可用於建構 Java 應用程式,每個存放區都包含範例應用程式和建構設定檔,可建構及測試該應用程式:

  • maven-example:Java 應用程式和範例建構設定檔,可使用 mvn 建構及測試應用程式。
  • gradle-example:Java 應用程式和範例建構設定檔,用於建構及測試含有 gradle 的應用程式。

後續步驟