【问题标题】:How to reset Kudu cached deployment on Azure如何在 Azure 上重置 Kudu 缓存部署
【发布时间】:2016-02-19 22:04:06
【问题描述】:

我之前在 Azure Web App 上有一个 Node 应用程序,现在是一个 Go 应用程序。问题是当我部署时我从 Kudu 得到这个:

Using cached version of deployment script (command: 'azure -y --no-dot-deployment -r "D:\home\site\repository" -o "D:\home\site\deployments\tools" --node --sitePath "D:\home\site\repository"').

这显然后来抱怨找不到 server/app.js 文件。

所以我尝试使用 azure site deploymentscript --go 为我的应用生成部署脚本。

即使我在应用程序的设置中有 GO15VENDOREXPERIMENT=1,它仍然在抱怨依赖关系。我所有的依赖项都在 /vendor 文件夹中出售。

我将这个变量设置在azure site deploymentscript 命令生成的deploy.cmd 文件中。

它仍然在抱怨一个依赖项不存在。请注意,现在它正在搜索本地供应商树,但依赖项在那里,我可以在 Github 存储库中看到它,我也可以在本地看到它。

我有其他 Go 应用程序在 Azure 上部署的依赖项很好,但这个是 Node 应用程序,以前根本无法运行。

我什至尝试评论来自 deploy.cmd 的依赖获取器,因为所有这些都是本地的,因此不需要此步骤。但即使这样也没有用,因为go build 未能抱怨依赖不存在。它位于供应商文件夹中,GO15VENDOREEXPERIMENT 在 cmd 文件和应用程序设置中设置为 1。

那么我的选择是什么?

我如何告诉 Kudu 使用 Go 默认部署,也许 Azure 的那个可以工作,因为我的其他应用程序没有本地 .deployementdeploy.cmd 文件。

编辑

我刚刚对一个全新的 Azure Web 应用进行了测试部署,默认情况下该应用被检测为 Node 应用。我猜这是由于根目录下存在 package.json,我也有一个 main.go,其中有 package main 作为包名。

所以也许只是azure site deploymentscript 生成的deploy.cmd 不是最新的还是什么? (我更新了我的 azure-cli 版本仅供参考,因为起初我没有 --go 标志)。

为了完整起见,这里是 Kudu 在新创建的应用上部署时的输出,得到与 Node 相同的错误:

remote: Resolving dependencies remote: # cd .; git clone https://github.com/org/mypkg D:\local\Temp\8d3397e1e014401\gopath\src\github.com\org\mypkg remote: Building Go app to produce exe file remote: Cloning into 'D:\local\Temp\8d3397e1e014401\gopath\src\github.com\org\mypkg'... remote: fatal: could not read Username for 'https://github.com': Bad file descriptor remote: package github.com/org/pkg/lib: exit status 128 remote: azureapp\main.go:3:8: cannot find package "github.com/org/pkg/lib" in any of: remote: D:\local\Temp\8d3397e1e014401\gopath\src\azureapp\vendor\github.com\org\pkg\lib (vendor tree) remote: Copy files for deployment remote: D:\Program Files\Go\1.5.3\src\github.com\org\pkg\lib (from $GOROOT) remote: D:\local\Temp\8d3397e1e014401\gopath\src\github.com\org\pkg\lib (from $GOPATH) remote: KuduSync.NET from: 'D:\home\site\repository' to: 'D:\home\site\wwwroot' remote: Could Not Find D:\home\site\repository\azureapp.exe remote: Copy web.config remote: web.config already existed. Skip remote: Finished successfully. remote: Running post deployment command(s)... remote: Deployment successful.

为什么要克隆库,这里的这一行[第二行]可能是导致整个问题的原因:

remote: # cd .; git clone https://github.com/org/mypkg

为什么如果设置了SET GO15VENDOREXPERIMENT=1,它会尝试克隆依赖项?我的另一个 Go 应用程序没有这样做。

【问题讨论】:

    标签: azure go azure-web-app-service kudu


    【解决方案1】:

    不确定是什么导致了这种状态,但请尝试以下方法:

    • 转到Kudu Console
    • 进入D:\home\site\deployments\tools文件夹
    • 删除deploy.cmddeploymentCacheKey
    • 尝试部署

    【讨论】:

    • 当我第一次在部署和存储库上执行 rm -rf 时收到此消息,我只是尝试在一个新的 Web 应用程序上进行部署,但我遇到了同样的错误,由于某些原因,依赖项是从 /vendor 文件夹中看不到
    • 它正在尝试克隆已售出的依赖远程:# cd .;混帐克隆github.com/org/mypkg。即使 GO15VENDOREXPERIMENT=1 我不明白我做错了什么
    • 你能像大卫提到的那样尝试清理缓存并重试吗?由于您提到您有另一个 Go 应用程序正在运行,因此对所有环境变量进行比较也会很好,看看有什么区别。 (获取环境变量,在调试控制台上简单运行“set”)
    • Xiaomin Wu 是的,我在工具中删除了缓存,做了 SET 以确保 GO15VENDOREXPERIMENT 在那里(它是),从本地删除 .deployment/deploy.cmd 而不是推送。 Kudu 会自动看到 Nodejs 部署(可能是由于 package.json,所以它没有看到 main.go 或按重要性顺序默认采用 Node)。所以我重新清除了部署/工具上的缓存,删除了 web.config在服务器上,从我在 Azure 上运行的 Go 应用程序的部署/工具中添加了 deploy.cmd,所以我猜问题是即使在重置后,deploymentCacheKey 也总是重置为节点部署
    • 对,如果你有 package.json 文件,nodejs 项目解析器将比 go 项目解析器接管,因为 go 项目解析器是在 nodejs 项目解析器之后引入的。
    猜你喜欢
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多