本頁說明如何使用 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 Writer (roles/artifactregistry.writer
) IAM 角色。
如要取得儲存測試記錄所需的權限,請要求管理員為您授予建構服務帳戶的 Storage 物件建立者 (roles/storage.objectCreator
) IAM 角色。
如要取得將應用程式部署至 Cloud Run 所需的權限,請要求管理員授予您建構服務帳戶的 Cloud Run 開發人員 (roles/run.developer
) IAM 角色。
設定 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'
替換下列值:
- repositoryName:Artifact Registry 中的 Go 存放區名稱。
- location:Artifact Registry 中存放庫的位置。
- projectId:包含 Artifact Registry 存放區的 Google Cloud 專案 ID。
- sourcePath:建構工作區中
go.mod
檔案的路徑。 - appPath:封裝應用程式的路徑。
- version:應用程式的版本號碼,以數字和點格式呈現,例如
v1.0.1
。
選用:啟用來源產生功能
Cloud Build 可產生可驗證的軟體構件供應鏈級別 (SLSA) 建構來源中繼資料,協助保護持續整合管道。
如要啟用來源產生功能,請在設定檔的
options
部分中新增requestedVerifyOption: VERIFIED
。建構作業完成後,您可以在 Artifact Registry 中查看存放區詳細資料。
您也可以查看建構來源資訊中繼資料和驗證來源資訊。
將測試記錄儲存至 Cloud Storage:您可以指定現有的值區位置和測試記錄路徑,藉此設定 Cloud Build 將任何測試記錄儲存在 Cloud Storage 中。
以下建構步驟會將您儲存在 JUNIT XML 檔案中的測試記錄儲存至 Cloud Storage 值區:
# 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"
自動建構觸發條件
請按照「建立建構觸發事件」一文中的步驟操作。在「Substitution variables」欄位中,您也必須提供 Artifact Registry 存放區的名稱,以及測試記錄的 Cloud Storage 值區名稱。
後續步驟
- 瞭解如何在 Compute Engine 上執行藍綠部署作業。
- 瞭解如何排解建構錯誤。