You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform配置Cloud Build Trigger部署Cloud Run镜像失败排查

问题描述

使用Terraform配置google_cloudbuild_trigger与google_cloud_run_v2_service资源后,GUI中触发器配置显示正常,但镜像构建始终失败,具体问题如下:

  1. Terraform应用错误
    执行terraform apply时收到报错:

Error: Error waiting to create Service: Error waiting for Creating Service: Error code 13, message: Revision 'cloud_run-00001-xxx' is not ready and cannot serve traffic. Image 'gcr.io/<project>/my-cb-gh-repo' not found.

  1. 手动配置后的构建错误
    在Cloud Run服务GUI中编辑持续部署触发器,指向GitHub仓库与Dockerfile后,触发仍失败,构建日志显示invoke.go存在语法错误:

can't load package: package .:
invoke.go:4:1: expected 'package', found ""
invoke.go:4:3: string literal not terminated

  1. 触发器配置矛盾点
  • 在触发器的build块中添加name = "gcr.io/cloud-builders/docker" args = ["push", "gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA"]步骤时,触发器会转而寻找Cloud Build配置文件而非Dockerfile;
  • 移除push步骤后,触发器会正确寻找Dockerfile,但构建仍失败。

相关配置代码

Cloud Run Service配置

resource "google_cloud_run_v2_service" "cloud_run_service" {
  provider = google-beta
  name     = var.cloud_run_service_name
  location = var.region
  template {
    service_account = data.terraform_remote_state.config1.outputs.cloud_run_sa
    containers {
      image = "gcr.io/${data.google_project.project.project_id}/${google_cloudbuildv2_repository.gh_repo.name}"
    }
  }
}

Cloud Build触发器配置

resource "google_cloudbuild_trigger" "cloud_bld_trigger7" {
  name        = "cloud-bld-trigger7"
  description = "Trigger with repository_event_config and build"
  provider    = google-beta
  location    = var.region
  repository_event_config {
    repository = google_cloudbuildv2_repository.gh_repo.id
    push {
      branch = "^main$"
    }
  }
  build {
    images = ["gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA"]
    options {
      logging = "CLOUD_LOGGING_ONLY"
    }
    step {
      name = "gcr.io/cloud-builders/docker"
      args = ["build", "-t", "gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA", "-f", "Dockerfile", "."]
    }
    substitutions = {
      _BRANCH_NAME = "^main$"
    }
  }
}

Dockerfile与Go代码

Dockerfile

FROM golang:1.13 as builder
WORKDIR /app
COPY invoke.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -v -o server.go

FROM ghcr.io/dbt-labs/dbt-bigquery:1.5.0
USER root
WORKDIR /dbt
COPY --from=builder /app/server ./
COPY script.sh ./
COPY . ./

ENTRYPOINT "./server"

invoke.go

package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
    "os/exec"
)

func handler(w http.ResponseWriter, r *http.Request) {
    log.Print("Request Received")
    cmd := exec.Command("/bin/sh", "script.sh")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    err := cmd.Run()
    if err != nil {
        log.Fatalf("cmd.Run() failed with %s\n", err)
    }
}
func main() {
    log.Print("Server starting")
    http.HandleFunc("/", handler)
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }
    log.Printf("%s port listening", port)
    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}

错误日志详情

Cloud Build构建日志错误

BUILD
Starting Step #0 - "Build"
Step #0 - "Build": Already have image (with digest): gcr.io/cloud-builders/docker
Step #0 - "Build": Sending build context to Docker daemon  548.4kB

Step #0 - "Build": Step 1/11 : FROM golang:1.13 as builder
Step #0 - "Build": 1.13: Pulling from library/golang
Step #0 - "Build": xxxxx: Pulling fs layer // Waiting // Verify Checksum // Download complete // Pull complete
////
Step #0 - "Build": Digest: sha256:yyyyyyyyyy
Step #0 - "Build": Status: Downloaded newer image for golang:1.13
Step #0 - "Build":  ---> aaaaaa
Step #0 - "Build": Step 2/11 : WORKDIR /app
Step #0 - "Build":  ---> Running in bbbb
Step #0 - "Build": Removing intermediate container bbbb
Step #0 - "Build":  ---> cccccc
Step #0 - "Build": Step 3/11 : COPY invoke.go ./
Step #0 - "Build":  ---> ddddd
Step #0 - "Build": Step 4/11 : RUN CGO_ENABLED=0 GOOS=linux go build -v -o server.go
Step #0 - "Build":  ---> Running in eeeee
Step #0 - "Build": can't load package: package .: 
Step #0 - "Build": invoke.go:4:1: expected 'package', found ""
Step #0 - "Build": invoke.go:4:3: string literal not terminated
Step #0 - "Build": The command '/bin/sh -c CGO_ENABLED=0 GOOS=linux go build -v -o server.go' returned a non-zero code: 1
Finished Step #0 - "Build"
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 1

Cloud Run GUI手动配置错误

Creating revision
 Image 'gcr.io/<_project_>/my-cb-gh-repo' not found.
Routing traffic
 Pending
Creating Cloud Build trigger
 Completed
Building and deploying from repository (see logs)
 Trigger execution failed: source code could not be built or deployed, find more information in build logs
Revision 'cloud_run-00001-xxx' is not ready and cannot serve traffic. Image 'gcr.io/<_project_>/my-cb-gh-repo' not found.

触发器配置测试结果

触发器配置块组合结果
github + build块显示正常,但为1st Gen源
repository_event_config块 + filename2nd Gen,但会在仓库中寻找Cloud Build配置文件(错误指向Dockerfile)
trigger_template + git_file_source块GUI报错
github块 + filename1st Gen,在仓库中寻找Cloud Build配置文件
repository_event_config + build块(含push步骤)2nd Gen,在仓库中寻找Cloud Build配置文件
repository_event_config + build块(不含push步骤)2nd Gen,会寻找Dockerfile(符合预期),但构建失败

内容的提问来源于stack exchange,提问作者mailer-daemon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:07:56