
当 Azure Web App 从 Node.js 迁移至 Go 等新运行时,Kudu 可能因缓存旧部署脚本而错误识别应用类型,导致 go build 失败或重复拉取依赖;本文提供安全、可复现的重置方法。
当 azure web app 从 node.js 迁移至 go 等新运行时,kudu 可能因缓存旧部署脚本而错误识别应用类型,导致 `go build` 失败或重复拉取依赖;本文提供安全、可复现的重置方法。
在 Azure App Service 中,Kudu(即 SCM site)负责源码构建与部署逻辑。它会根据仓库根目录文件(如 package.json、main.go、.csproj 等)自动检测应用类型,并生成/缓存对应的部署脚本(如 deploy.cmd)。一旦应用类型变更(例如从 Node.js 切换为 Go),Kudu 不会自动失效旧缓存——它仍沿用先前生成的 deploy.cmd 和 deploymentCacheKey,从而引发一系列典型问题:
- 错误提示 Using cached version of deployment script...
- 构建时仍尝试执行 Node.js 流程(如查找 server.js 或 app.js)
- 即使手动运行 azure site deploymentscript --go 生成新脚本,Kudu 也可能忽略它,继续使用缓存版本
- GO15VENDOREXPERIMENT=1 生效但 go build 仍试图 git clone 私有依赖(说明构建环境未真正切换为 Go 模式)
✅ 根本解决方式:强制清除 Kudu 部署缓存
请按以下步骤操作(无需删除应用、重建资源组或修改 CI/CD 流水线):
访问 Kudu 控制台
打开浏览器,访问你的 App Service 的 Kudu 地址:
https://.scm.azurewebsites.net/DebugConsole
(例如:https://mygoapp.scm.azurewebsites.net/DebugConsole)导航至部署工具目录
在 Kudu 控制台中,依次进入路径:
D:\home\site\deployments\tools-
删除关键缓存文件
执行以下命令(Windows CMD 模式):del /f deploy.cmd del /f deploymentCacheKey
⚠️ 注意:deploymentCacheKey 是一个空文件(无扩展名),但它是 Kudu 判断是否复用缓存脚本的核心标识。仅删 deploy.cmd 不足以触发重新检测。
-
触发一次新部署
通过 Git 推送、ZIP 部署、Azure Pipelines 或 Portal 重新部署。Kudu 将:- 重新扫描仓库根目录(此时若存在 main.go + go.mod 或 vendor/,且无 package.json 干扰,将正确识别为 Go 应用)
- 自动生成符合 Go 规范的默认部署流程(无需 deploy.cmd)
- 跳过 npm install,直接执行 go build -o wwwroot/azureapp.exe .
- 尊重 GO15VENDOREXPERIMENT=1(App Service 默认已启用该变量,无需额外设置)
? 补充说明与最佳实践
- ✅ 避免手动维护 deploy.cmd:除非有极特殊需求(如自定义编译参数、多阶段构建),否则应依赖 Kudu 的自动检测机制。手动脚本易过时且难以调试。
- ✅ 清理干扰文件:若仓库中仍保留 package.json(即使未使用),建议暂时重命名或移出根目录(如 legacy-package.json),防止 Kudu 优先匹配 Node.js 类型。
- ✅ 验证 Go 环境就绪:App Service Windows 上默认安装 Go 1.19+(2026 年最新版),Linux 上为 Go 1.21+;可通过 Kudu 控制台执行 go version 确认。
- ❌ 不推荐方案:
- 删除整个 D:\home\site\deployments\ 目录(可能影响历史部署记录与回滚能力)
- 修改 SCM_DO_BUILD_DURING_DEPLOYMENT=true(此变量对 Go 应用无效,仅适用于 .NET/Python 等需 Kudu 构建的场景)
完成上述操作后,部署日志将显示类似内容,表明已成功切换为 Go 检测模式:
remote: Detected following language(s): Go remote: Using Go version: 1.21.6 remote: Preparing deployment for commit id 'abc123...' remote: Running go build -o wwwroot/azureapp.exe . remote: Successfully built Go executable.
至此,Kudu 缓存已被彻底重置,部署流程回归标准 Go 行为——简洁、可靠、符合现代 Go 工程实践。

















