GitHub Actions npm timeout 是否对得上

我一般先把 Actions 日志按四段切开:checkout、install、build、deploy。超时如果发生在 install,十有八九是依赖源和缓存;如果 build 已完成,wrangler pages deploywrangler deploy 卡住,才看 Cloudflare 侧。

卡住位置常见信号做什么
npm/pnpm installETIMEDOUTECONNRESET缓存 store,固定 registry
Docker pullcontext deadline exceeded换 GHCR 或预构建镜像
pip installReadTimeoutError配 pip timeout 和 cache
wrangler deploy上传后无响应升级 wrangler,查 token 和状态页

排查步骤

先把缓存补上。Node 项目至少缓存 ~/.npm 或 pnpm store,Python 项目缓存 pip cache,Docker 项目尽量用 buildx cache。缓存命中一次,很多「网络问题」就消失了。

再给包管理器写清楚网络参数。npm 可以设 fetch-retries=3fetch-timeout=60000;pip 可以用 --timeout 60 --retries 3。不要把超时拉到 10 分钟,CI 卡住时你只会更晚知道。

接着减少外部下载。前端项目把 Playwright browser、Sharp binary、Chromium 这类大文件单独缓存。Docker 里不要每次 apt update 拉一堆系统包,做成基础镜像推到 GHCR。

最后,部署阶段单独测:

npx wrangler --version
npx wrangler pages deploy ./dist --project-name your-project

本地同一条命令能过,Actions 不过,优先查 token 权限和 runner 网络;本地也不过,再看 Cloudflare 项目配置。

npm、Docker、PyPI 分别怎么改?

场景建议配置备注
npmnpm ci --prefer-offlinelockfile 必须干净
pnpm缓存 pnpm storemonorepo 收益更明显
Dockerdocker/build-push-action cache避免重复拉大镜像
PyPIpip install --timeout 60 --retries 3私有包要查 token

我会把这些配置写进同一个 runbook,别散在三份 workflow 里。一个人维护项目时,CI 文件越碎,越容易半年后忘记自己当时为什么这么写。

还没恢复时,单独查 GitHub Actions npm timeout

把部署拆成两段:GitHub Actions 只 build artifact,Cloudflare 只接收 dist。这样你能知道是依赖下载慢,还是 Cloudflare 上传慢。如果团队经常在出差、共享办公网络或跨地区机器上看日志,一条海外服务跑 GitHub Actions / Cloudflare 的稳定线路至少能让 Dashboard、Wrangler 和 GitHub 日志排查少一点抖动。

相关阅读