建構及測試 Python 應用程式

本頁說明如何設定 Cloud Build 來建構及測試 Python 應用程式、將成果上傳至 Artifact Registry、產生來源資訊,以及將測試記錄儲存在 Cloud Storage 中。

Cloud Build 可讓您使用任何開放給大眾使用的容器映像檔執行工作。Docker Hub 的公開 python 映像檔已預先安裝 pythonpip 工具。您可以設定 Cloud Build 使用這些工具安裝依附元件、建構,並使用這些工具執行單元測試。

事前準備

本頁說明假設您已熟悉 Python。此外:

  • Enable the Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Enable the APIs

  • 如要執行本頁的 gcloud 指令,請安裝 Google Cloud CLI
  • 請準備好您的 Python 專案。
  • 在 Artifact Registry 中擁有 Python 存放區。如果沒有,請建立新的存放區
  • 如要將測試記錄儲存在 Cloud Storage 中,請在 Cloud Storage 中建立值區

必要的 IAM 權限

如需授予這些角色的操作說明,請參閱「使用 IAM 頁面授予角色」。

設定 Python 建構

本節將介紹 Python 應用程式的建構設定檔範例。其中包含建構步驟,可用來管理安裝需求、新增單元測試,並在測試通過後建構及部署應用程式。

  1. 在專案根目錄中,建立名為 cloudbuild.yamlCloud Build 設定檔

  2. 安裝需求:Docker Hub 提供的 python 映像檔已預先安裝 pip。如要從 pip 安裝依附元件,請新增含有下列欄位的建構步驟:

    • name:將這個欄位的值設為 pythonpython:<tag>,即可使用 Docker Hub 中的 Python 映像檔執行此項工作。如要查看其他 Python 映像檔的可用標記清單,請參閱 Python 映像檔的 Docker Hub 參考資料
    • entrypoint:設定這個欄位會覆寫 name 中參照圖片的預設進入點。將這個欄位的值設為 pip,即可將 pip 做為建構步驟的進入點,並執行 pip 指令。
    • args:建構步驟的 args 欄位會取得引數清單,並將其傳送至 name 欄位參照的圖片。傳遞引數,以便在這個欄位中執行 pip install 指令。pip install 指令中的 --user 標記可確保後續的建構步驟可存取在這個建構步驟中安裝的模組。

    以下建構步驟會將引數新增至安裝需求:

     steps:
        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pip', 'install', '--upgrade', 'pip']
        - name: python
          entrypoint: python
          args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
    
  3. 新增單元測試:如果您已使用 pytest 等測試架構在應用程式中定義單元測試,可以在建構步驟中新增下列欄位,藉此設定 Cloud Build 執行測試:

    • name:將這個欄位的值設為 python,即可使用 Docker Hub 中的 Python 映像檔執行工作。
    • entrypoint:將這個欄位的值設為 python,即可執行 python 指令。
    • args:新增執行 python pytest 指令的引數。

    以下建構步驟會將 pytest 記錄輸出內容儲存至 JUNIT XML 檔案。此檔案的名稱會使用 $SHORT_SHA 建構,這是與建構作業相關聯的修訂版本 ID 的簡短版本。後續的建構步驟會將此檔案中的記錄儲存至 Cloud Storage。

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
    
  4. 建構:在建構設定檔中定義建構工具和 args,以建構應用程式:

    • name:將這個欄位的值設為 python,即可使用 Docker Hub 中的 Python 映像檔執行工作。
    • entrypoint:將這個欄位的值設為 python,即可執行 python 指令。
    • args:新增執行建構作業的引數。

    下列建構步驟會啟動建構作業:

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'build']
    
  5. 上傳至 Artifact Registry

    在設定檔中新增 pythonPackages 欄位,並在 Artifact Registry 中指定 Python 存放區:

        artifacts:
           pythonPackages:
           - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY'
              paths: ['dist/*']
    

    替換下列值:

    • PROJECT-ID 是包含 Artifact Registry 存放區的 Google Cloud 專案 ID。
    • REPOSITORY 是存放區的 ID。
    • LOCATION 是存放區的地區或多地區位置
  6. 選用:啟用來源產生功能

    Cloud Build 可產生可驗證的軟體構件供應鏈級別 (SLSA) 建構來源中繼資料,協助保護持續整合管道。

    如要啟用來源產生功能,請在設定檔的 options 部分中新增 requestedVerifyOption: VERIFIED

  7. 將測試記錄儲存至 Cloud Storage:您可以指定現有的值區位置和測試記錄路徑,設定 Cloud Build 將任何測試記錄儲存在 Cloud Storage 中。以下建構步驟會將您儲存在 JUNIT XML 檔案中的測試記錄儲存至 Cloud Storage 值區:

        artifacts:
        objects:
           location: 'gs://${_BUCKET_NAME}/'
           paths:
              - '${SHORT_SHA}_test_log.xml'
    
  8. 啟動建構作業手動使用建構觸發條件

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

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

後續步驟