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

使用google-devtools-cloudbuild触发构建时遇实体未找到错误求助

问题描述

我从google-cloud-node的示例库中直接获取代码,已配置好ADC(应用默认凭据),账号拥有Owner权限及所有Cloud Build权限,同一账号能通过gcloud submit build创建构建。我从Cloud Build触发器页面的URL中获取了触发器UUID,且手动在GCP控制台运行构建时确认发送的payload完全一致,但运行以下代码时遇到NOT_FOUND错误:

export default async function cloudBuild(
  projectId = "myprojectId", // 你的Google Cloud项目ID
  triggerId = "75aaeefc-0b11-4ce8-b285-cc066ceffc77", // 构建触发器的UUID
  commitSha = "c13a9a2d500bec8680d3bb5a064c7dc72db31a90" // 要运行构建对应的提交SHA
) {
  // 导入Google Cloud客户端库

  // 创建客户端
  const cb = new CloudBuildClient();

  // 针对指定提交启动构建
  const [resp] = await cb.runBuildTrigger({
    projectId,
    triggerId,
    source: {
      commitSha,
    },
  });

  console.info(`triggered build for ${triggerId}`);
  const [build] = await resp.promise();
}

错误信息

Error: 5 NOT_FOUND: Requested entity was not found.
    at callErrorFromStatus (/Users/jambrose/Apps/deploy_server/node_modules/@grpc/grpc-js/src/call.ts:81:17)
    at Object.onReceiveStatus (/Users/jambrose/Apps/deploy_server/node_modules/@grpc/grpc-js/src/client.ts:356:55)
    at Object.onReceiveStatus (/Users/jambrose/Apps/deploy_server/node_modules/@grpc/grpc-js/src/client-interceptors.ts:455:34)
    at Object.onReceiveStatus (/Users/jambrose/Apps/deploy_server/node_modules/@grpc/grpc-js/src/client-interceptors.ts:417:48)
    at /Users/jambrose/Apps/deploy_server/node_modules/@grpc/grpc-js/src/resolving-call.ts:111:24
    at processTicksAndRejections (node:internal/process/task_queues:78:11)
for call at
 {
  code: 5,
  details: 'Requested entity was not found.',
  metadata: Metadata {
    internalRepr: Map(2) {
      'endpoint-load-metrics-bin' => [Array],
      'grpc-server-stats-bin' => [Array]
    },
    options: {}
  }
}

更新记录

  • 更新1:怀疑是认证问题,测试Storage.listBuckets({ keyFilename: "key-file.json" })并成功返回结果,说明密钥文件有效,服务账号已激活。
  • 更新2:查看runBuildTrigger示例代码时,注释提到触发器名称格式为projects/{project}/locations/{location}/triggers/{trigger},但示例请求未包含name字段。

解决方案

这个NOT_FOUND错误核心原因是触发器的区域信息缺失。Cloud Build触发器属于区域资源(默认如us-central1),如果请求中未指定区域,API无法定位到目标触发器。

你可以通过以下两种方式修改代码:

方式1:添加区域字段

先在GCP控制台的触发器详情页确认触发器所在区域(如us-central1),然后在请求中补充location参数:

const [resp] = await cb.runBuildTrigger({
  projectId,
  triggerId,
  location: "us-central1", // 替换为你的触发器实际区域
  source: {
    commitSha,
  },
});

方式2:使用完整触发器名称

直接传入符合格式的完整触发器名称,替代projectId+triggerId的组合:

const [resp] = await cb.runBuildTrigger({
  name: `projects/${projectId}/locations/us-central1/triggers/${triggerId}`, // 替换区域
  source: {
    commitSha,
  },
});

额外验证点:

  • 确认触发器所属项目与代码中projectId一致
  • 确认commitSha对应的代码仓库与触发器配置的仓库匹配

内容的提问来源于stack exchange,提问作者jambrose

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:40:00