本頁說明如何設定 Cloud Build 來建構及測試 Python 應用程式、將成果上傳至 Artifact Registry、產生來源資訊,以及將測試記錄儲存在 Cloud Storage 中。
Cloud Build 可讓您使用任何開放給大眾使用的容器映像檔執行工作。Docker Hub 的公開 python
映像檔已預先安裝 python
和 pip
工具。您可以設定 Cloud Build 使用這些工具安裝依附元件、建構,並使用這些工具執行單元測試。
事前準備
本頁說明假設您已熟悉 Python。此外:
-
Enable the Cloud Build, Artifact Registry, and Cloud Storage APIs.
- 如要執行本頁的
gcloud
指令,請安裝 Google Cloud CLI。 - 請準備好您的 Python 專案。
- 在 Artifact Registry 中擁有 Python 存放區。如果沒有,請建立新的存放區。
- 如要將測試記錄儲存在 Cloud Storage 中,請在 Cloud Storage 中建立值區。
必要的 IAM 權限
如要在記錄中儲存測試記錄,請將 Cloud Storage 值區的 Storage 物件建立者 (
roles/storage.objectCreator
) 角色授予建構服務帳戶。如要在 Artifact Registry 中儲存已建構的映像檔,請將 Artifact Registry Writer (
roles/artifactregistry.writer
) 角色授予建構服務帳戶。
如需授予這些角色的操作說明,請參閱「使用 IAM 頁面授予角色」。
設定 Python 建構
本節將介紹 Python 應用程式的建構設定檔範例。其中包含建構步驟,可用來管理安裝需求、新增單元測試,並在測試通過後建構及部署應用程式。
在專案根目錄中,建立名為
cloudbuild.yaml
的 Cloud Build 設定檔。安裝需求:Docker Hub 提供的
python
映像檔已預先安裝pip
。如要從pip
安裝依附元件,請新增含有下列欄位的建構步驟:name
:將這個欄位的值設為python
或python:<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']
新增單元測試:如果您已使用
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']
建構:在建構設定檔中定義建構工具和
args
,以建構應用程式:name
:將這個欄位的值設為python
,即可使用 Docker Hub 中的 Python 映像檔執行工作。entrypoint
:將這個欄位的值設為python
,即可執行python
指令。args
:新增執行建構作業的引數。
下列建構步驟會啟動建構作業:
- name: 'python' entrypoint: 'python' args: ['-m', 'build']
上傳至 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 是存放區的地區或多地區位置。
選用:啟用來源產生功能
Cloud Build 可產生可驗證的軟體構件供應鏈級別 (SLSA) 建構來源中繼資料,協助保護持續整合管道。
如要啟用來源產生功能,請在設定檔的
options
部分中新增requestedVerifyOption: VERIFIED
。將測試記錄儲存至 Cloud Storage:您可以指定現有的值區位置和測試記錄路徑,設定 Cloud Build 將任何測試記錄儲存在 Cloud Storage 中。以下建構步驟會將您儲存在 JUNIT XML 檔案中的測試記錄儲存至 Cloud Storage 值區:
artifacts: objects: location: 'gs://${_BUCKET_NAME}/' paths: - '${SHORT_SHA}_test_log.xml'
-
建構作業完成後,您可以在 Artifact Registry 中查看存放區詳細資料。
您也可以查看建構來源資訊中繼資料和驗證來源資訊。
後續步驟
- 瞭解如何查看建構結果。
- 瞭解如何保護建構作業。
- 瞭解如何建構及封裝 Python 應用程式。
- 瞭解如何使用私人依附元件。
- 瞭解如何在 Compute Engine 上執行藍綠部署作業。
- 瞭解如何排解建構錯誤。