排解建構錯誤等問題

本頁面提供一些常見錯誤訊息的疑難排解策略以及解決方案,這些錯誤訊息可能會在您執行建構作業時顯示。

您是否查看過建構記錄?

使用記錄或 Cloud Storage 建構記錄,進一步瞭解建構錯誤。寫入 stdoutstderr 的記錄可使用 Google Cloud 控制台和 gcloud CLI 檢視

使用者無法存取建構記錄,因此手動建構失敗

嘗試手動執行建構作業時,會看到下列錯誤訊息:

AccessDeniedAccess denied. [EMAIL_ADDRESS] does not have storage.objects.get access to the Google Cloud Storage object.

發生這項錯誤的原因是,Cloud Build 要求執行手動建構作業並使用預設 Cloud Storage 記錄檔儲存空間的使用者,除了 Cloud Build 編輯者角色外,還須具備專案檢視者 IAM 角色。如要解決這個錯誤,請執行下列任一操作:

缺少 iam.serviceAccounts.actAs 權限,導致建構失敗

使用 Cloud Run 或 App Engine 等代管服務部署建構版本時,會看到下列錯誤:

Missing necessary permission iam.serviceAccounts.actAs for [USER] on the service account [SERVICE ACCOUNT]

如要解決這項錯誤,請設定指定的 Cloud Build 服務帳戶預設 Cloud Build 服務帳戶,模擬您用於建構作業的受管理服務服務帳戶。如要進一步瞭解這項工作,請參閱「為代管服務設定 Cloud Build 服務帳戶模擬功能」。

如要進一步瞭解服務帳戶和權限,請參閱下列主題:

在 Cloud Run functions 上部署時發生權限遭拒錯誤

嘗試使用 Cloud Run functions 時,您會看到下列錯誤訊息:

ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.get' denied]

如要修正這項錯誤,請將 Cloud Run Functions 開發人員角色授予建構服務帳戶

缺少 cloudbuild.builds.create 權限,因此自動建構觸發條件失敗

執行自動建構觸發條件時,您會看到類似下列的錯誤訊息:

Failed to trigger build: Permission 'cloudbuild.builds.create' denied on resource 'projects/xxxxxxxx' (or it may not exist)

自動建構觸發條件會使用服務帳戶建立建構作業。這項錯誤表示服務帳戶缺少 cloudbuild.builds.create IAM 權限,因此無法執行自動建構觸發條件。如要解決這項錯誤,請將 Cloud Build Service Account IAM 角色授予使用者指定的服務帳戶預設服務帳戶

缺少服務代理權限,因此建構提交作業失敗

如果 Cloud Build 服務代理遭到刪除或缺少權限,提交建構作業時可能會發生下列錯誤。

Caller does not have required permission to use project $PROJECT_ID. Grant the caller the roles/serviceusage.serviceUsageConsumer role, or a custom role with the serviceusage.services.use permission, by visiting https://console.developers.google.com/iam-admin/iam/project?project=$PROJECT_ID and then retry. Propagation of the new permission may take a few minutes.

在此情境中,呼叫者是 Cloud Build 服務代理。如要解決權限問題,請按照下列步驟操作:

  1. 確認 Cloud Build 服務代理程式是否存在。如要查看專案的服務代理程式,請前往 Google Cloud 控制台的「IAM」頁面,然後選取「顯示 Google 代管的服務帳戶」核取方塊。如果沒有,請執行下列 gcloud CLI 指令建立:

    gcloud beta services identity create --service=cloudbuild.googleapis.com \
        --project=PROJECT_ID
    
  2. 接著,將 roles/cloudbuild.serviceAgent IAM 角色授予 Cloud Build 服務代理:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com" \
        --role="roles/cloudbuild.serviceAgent"
    

如要驗證可能是哪個 IAM 身分導致服務代理程式權限問題,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中開啟 Logs Explorer:

    前往 Logs Explorer

  2. 在查詢欄位中輸入下列文字:

    resource.type="project"
    log_name="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
    "service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    
  3. 如果使用這項查詢後看到任何記錄項目,請檢查是否有任何項目從服務代理 (service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com) 移除權限。如有,請查看該記錄中的 protoPayload.authenticationInfo.principalEmail,找出負責移除權限或包含錯誤訊息所列權限的 roles/cloudbuild.serviceAgent 角色的 IAM 身分。

觸發條件失敗,發生 Couldn't read commit 錯誤

執行自動建構觸發條件時,您會看到下列錯誤:

  Failed to trigger build: Couldn't read commit

如果您嘗試使用不存在的分支觸發建構作業,Cloud Build 會傳回這則訊息。檢查目錄名稱的拼字和一致性。如需觸發條件設定的操作說明,請參閱「建立及管理自動建構觸發條件」。

無法建立 Pub/Sub 觸發條件

建立 Pub/Sub 觸發條件時,您會看到下列錯誤:

  Failed to create trigger: Request is prohibited by organization's policy

這項錯誤表示專案中的 Pub/Sub API 受到限制。專案限制 Pub/Sub API 會限制建立推送訂閱項目的能力。 您可以暫時從周邊的受限制服務中移除 Pub/Sub,建立觸發條件,然後再次限制 Pub/Sub API,即可解決錯誤。

由於發生錯誤,因此無法從私人存放區提取或擷取分支:fatal: could not read Username

嘗試對私人存放區的遠端分支執行