本頁說明如何設定 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 Logging 中儲存測試記錄,請將 Cloud Storage bucket 的「Storage 物件建立者 (
roles/storage.objectCreator
)」角色授予建構服務帳戶。如要在 Artifact Registry 中儲存建構的映像檔,請將Artifact Registry 寫入者 (
roles/artifactregistry.writer
) 角色授予建構服務帳戶。
如需授予這些角色的操作說明,請參閱「使用 IAM 頁面授予角色」。
設定 Python 建構作業
本節將逐步說明 Python 應用程式的建構設定檔範例。這個檔案包含管理安裝需求、新增單元測試的建構步驟,以及測試通過後建構及部署應用程式的步驟。
在專案根目錄中,建立名為
cloudbuild.yaml
的 Cloud Build 設定檔。安裝必要條件:Docker Hub 的
python
映像檔已預先安裝pip
。如要從pip
安裝依附元件,請新增建構步驟,並填入下列欄位:name
:將這個欄位的值設為python
或python:<tag>
,即可使用 Docker Hub 的 Python 映像檔執行這項工作。如要查看其他 Python 映像檔的可用標記清單,請參閱 Docker Hub 中 Python 映像檔的參考資料。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 bucket:
artifacts: objects: location: 'gs://${_BUCKET_NAME}/' paths: - '${SHORT_SHA}_test_log.xml'
-
建構完成後,您可以在 Artifact Registry 中查看存放區詳細資料。
您也可以查看建構來源資訊中繼資料,以及驗證來源資訊。
後續步驟
- 瞭解如何查看建構結果。
- 瞭解如何保護建構作業。
- 瞭解如何建構 Python 應用程式並將其容器化。
- 瞭解如何使用私人依附元件。
- 瞭解如何在 Compute Engine 上執行藍綠部署。
- 瞭解如何排解建構錯誤。