本頁說明如何使用 Cloud Build 建構及測試 Go 應用程式、將構件上傳至 Artifact Registry、產生出處資訊,以及將測試記錄儲存在 Cloud Storage 中。
事前準備
本頁的操作說明假設您熟悉 Go。此外,您還需要:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
- 如要在本頁面執行
gcloud
指令,請安裝 Google Cloud CLI。 - 準備好 Go 專案。
- 在 Artifact Registry 中建立 Go 存放區。如果沒有,請建立新的存放區。
- 如要在 Cloud Storage 中儲存測試記錄,請在 Cloud Storage 中建立值區。
設定服務帳戶
本文中的範例使用使用者指定的服務帳戶。如要建立 Cloud Build 使用的服務帳戶,請在 Google Cloud CLI 中執行下列指令:
gcloud iam service-accounts create cloud-build-go \
--description="Build and test Go applications" \
--display-name="Cloud Build Go" \
--project="PROJECT_ID"
預設的 Compute 服務帳戶 (由 Cloud Run 使用) 必須有權做為新的服務帳戶。首先,請找出專案中運算服務帳戶的名稱:
gcloud iam service-accounts list --filter="email:-compute@developer.gserviceaccount.com"
接著,授予「服務帳戶使用者」(roles/iam.serviceAccountUser
) 角色:
gcloud iam service-accounts add-iam-policy-binding \
COMPUTE_SERVICE_ACCOUNT_EMAIL \
--member="serviceAccount:cloud-build-go@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
將 COMPUTE_SERVICE_ACCOUNT_EMAIL
替換為上一個指令列印的預設運算服務帳戶電子郵件地址。
設定 IAM 權限
確認您具備所需權限:
如要取得在 Cloud Build 中執行建構作業所需的權限,請要求管理員將Cloud Build 服務帳戶 (roles/cloudbuild.builds.builder
) IAM 角色授予建構服務帳戶。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
如要取得在 Artifact Registry 中儲存建構構件的必要權限,請要求管理員將Artifact Registry 寫入者 (roles/artifactregistry.writer
) IAM 角色授予建構服務帳戶。
如要取得將測試記錄儲存在 Cloud Logging 所需的權限,請要求管理員為您的建構服務帳戶授予 Storage 物件建立者 (roles/storage.objectCreator
) IAM 角色。
如要取得將應用程式部署至 Cloud Run 所需的權限,請要求管理員將Cloud Run 開發人員 (roles/run.developer
) 身分與存取權管理角色授予您的建構服務帳戶。
設定 Go 建構
Docker Hub 的公開 golang
映像檔支援使用 Go 模組建構。在 Cloud Build 設定檔中,使用這個映像檔做為建構步驟,即可在映像檔中叫用 go
指令。系統會將已傳送至這個建構步驟的引數直接傳送至 golang
工具,進而讓您在這個映像檔中執行任何 go
指令。
本節說明如何為 cloud-build-samples Git 存放區中的 Go 應用程式,建立範例建構設定檔。建構設定檔包含建構應用程式的步驟、新增單元測試,以及在測試通過後部署應用程式的步驟。
如要建構 Go 應用程式範例,請執行下列操作:
設定單元測試:如果您已在應用程式中定義單元測試,可以透過在建構步驟中新增下列欄位,設定 Cloud Build 執行測試:
name
:將這個欄位的值設為golang
,即可為工作使用 Docker Hub 的 golang 映像檔。entrypoint
:將這個欄位的值設為/bin/bash
。這樣一來,您就能直接從建構步驟執行多行 Bash 指令。args
:建構步驟的args
欄位會取得引數清單,並將其傳送至name
欄位參照的映像檔。在以下範例中,args
欄位會採用下列引數:- 執行測試記錄格式化工具,下載測試記錄輸出內容。
- 列印記錄輸出內容。
- 將測試結果儲存到
sponge.log
。 將
sponge.log
中的結果輸出至 JUNIT XML 檔案。JUNIT XML 檔案的名稱是使用與建構作業相關聯的提交 ID 的簡短版本建構而成。後續的建構步驟會將這個檔案中的記錄儲存至 Cloud Storage。steps: # Run tests and save to file - name: golang:1.23 entrypoint: /bin/bash args: - -c - | go install github.com/jstemmer/go-junit-report/v2@latest 2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
上傳至 Artifact Registry:在設定檔中,使用
goModules
欄位指定應用程式路徑,以及 Artifact Registry 中的 Go 存放區:# Upload Go module to artifact registry artifacts: goModules: repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProjectId: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'
替換下列值:
選用:啟用出處生成功能
Cloud Build 可產生可驗證的軟體構件供應鏈級別 (SLSA) 建構出處中繼資料,有助於保護持續整合管道。
如要啟用出處生成功能,請在設定檔的
options
區段中新增requestedVerifyOption: VERIFIED
。建構完成後,您可以在 Artifact Registry 中查看存放區詳細資料。
您也可以查看建構來源資訊中繼資料,以及驗證來源資訊。
將測試記錄儲存至 Cloud Storage:您可以指定現有的值區位置和測試記錄路徑,將 Cloud Build 設定為將所有測試記錄儲存至 Cloud Storage。
下列建構步驟會將您儲存在 JUNIT XML 檔案中的測試記錄,儲存至 Cloud Storage bucket:
# Save test logs to Google Cloud Storage artifacts: objects: location: gs://$_BUCKET_NAME/ paths: - ${SHORT_SHA}_test_log.xml
下列程式碼片段顯示上述步驟的完整建構設定檔:
steps: # Run tests and save to file - name: golang:1.23 entrypoint: /bin/bash args: - -c - | go install github.com/jstemmer/go-junit-report/v2@latest 2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml # Store golang modules in Google Artifact Registry artifacts: goModules: repositoryName: 'repositoryName' repositoryLocation: 'location' repositoryProject_id: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'
使用 gcloud CLI 啟動建構,或建立建構觸發條件:
Google Cloud CLI
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
--substitutions=_AR_REPO_NAME="AR_REPO_NAME"
自動建構觸發條件
按照「建立建構觸發程序」一文中的步驟操作。在「替代變數」欄位中,您也必須提供 Artifact Registry 存放區名稱和 Cloud Storage 值區名稱,以存放測試記錄。
後續步驟
- 瞭解如何在 Compute Engine 上執行藍綠部署。
- 瞭解如何排解建構錯誤。