如何访问GCP Cloud Build日志及获取npm test超时的详细日志?
解决Cloud Build中npm test超时无法查看debug日志的问题
针对你遇到的Cloud Build执行npm test超时、无法通过SSH访问环境查看debug日志的问题,这里有几个可行的方案:
1. 强制将debug日志输出到Cloud Build stdout
默认npm会把详细日志写入本地文件,但你可以在构建步骤中,不管测试是否失败,都将日志文件内容打印到标准输出,这样就能在Cloud Build的日志面板里直接看到了。
修改你的cloudbuild.yaml,将测试步骤改为:
steps: - name: 'node' entrypoint: 'bash' args: - '-c' - | # 执行测试命令,即使失败也继续执行后续命令 npm test || true # 打印所有npm debug日志到stdout cat /builder/home/.npm/_logs/*.log
这样不管测试是否超时失败,都会把所有npm生成的debug日志输出到Cloud Build的日志里,你就能直接看到详细错误信息了。
2. 将debug日志作为工件上传到Cloud Storage
如果日志内容比较大,或者你需要长期保存排查,可以把日志文件上传到Google Cloud Storage(GCS)作为构建工件。
同样修改cloudbuild.yaml,添加日志上传步骤(确保测试失败后仍能执行上传):
steps: - name: 'node' entrypoint: 'bash' args: - '-c' - | # 执行测试,之后不管结果都上传日志 npm test # 用时间戳命名日志文件,避免覆盖 gsutil cp /builder/home/.npm/_logs/*.log gs://your-bucket-name/npm-debug-logs/$(date +%Y%m%d%H%M%S)-debug.log
注意替换your-bucket-name为你自己的GCS存储桶名称,构建完成后就能在存储桶里找到对应的日志文件了。
3. 临时SSH连接到运行中的Cloud Build实例
虽然你之前说无法SSH,但其实Cloud Build支持临时访问正在运行的构建实例,只是需要注意时机:
- 首先调整构建超时时间,避免还没连上就超时了。在
cloudbuild.yaml顶部添加:timeout: 3600s # 设置为1小时,足够排查 - 触发构建后,立即前往Cloud Build控制台,找到正在运行的构建任务,点击右上角的SSH按钮,就能直接连接到构建环境的容器。
- 连接成功后,直接执行
cat /builder/home/.npm/_logs/2020-11-09T07_56_23_573Z-debug.log就能查看日志内容了。
需要注意的是,如果构建已经因为超时终止,实例会被销毁,就无法再SSH连接了,所以要在构建运行过程中及时操作。
另外,关于你看到的ts-jest警告,虽然当前TypeScript版本不在官方测试范围内,但你本地运行正常,所以大概率还是Cloud Build环境的资源限制或者依赖安装问题,查看debug日志应该能找到具体原因。
内容的提问来源于stack exchange,提问作者Adrien Lemaire
相关产品推荐
相关产品推荐

