【发布时间】:2016-10-12 20:03:05
【问题描述】:
总结
我正在尝试将 MVC5 Web 应用程序部署到 Azure。我需要以编程方式设置 WEBSITE_NODE_DEFAULT_VERSION 以确保所有配置都以原子方式包含在 repo 中。当我尝试在.deployment 或deploy.cmd 中设置该应用程序设置/环境变量时,它会被部署忽略。为什么?
背景
我的网络应用程序使用 bower 作为客户端库,并使用简单的 gulp 脚本将最小化的库放在目标文件夹中。然后我的 cshtml 文件从所述目标文件夹中使用它们。
根据 this comment,我已经从 Azure 中删除了部署脚本(.deployment 和 deploy.cmd)并对其进行了调整以安装 bower。
然后下载您的自定义部署脚本。如果你去 https://.scm.azurewebsites.net 然后点击工具 -> 下载自定义部署脚本或从 D:\home\deployment\tools 下载它
然后我的研究表明 npm 在 Azure Web 应用程序部署中默认可用,并且预先安装了 bower 包,但 gulp 没有。所以我需要在部署脚本中添加 3 个自定义命令:
- npm install(使 gulp 可用)
- bower 安装(下拉客户端库)
- gulp(流水线化客户端库)
根据this question,我面临的问题是正在使用的节点(以及 npm)是旧版本。 npm install 命令导致文件名过长,这是旧版本 npm 中的一个已知问题。
根据this set of Kudu runtime settings,我正在尝试将WEBSITE_NODE_DEFAULT_VERSION 设置为6.7.0(提出此问题时的最新版本),因为这样可以确保最新的npm 也可以运行.
这就是我的问题所在。在deploy.cmd 中,在运行npm install 之前,我添加了一行set WEBSITE_NODE_DEFAULT_VERSION = 6.7.0(我尝试过变体,包括使用引号,等号周围没有空格符号,setlocal 等)我在设置变量的任一侧有echo %WEBSITE_NODE_DEFAULT_VERSION%。之前和之后的输出总是4.4.7。
我也在.deployment 中尝试过,但无济于事。我什至尝试改变位置(有时在command = deploy.cmd 之前,有时在之后)。
从我可以从网上破译的内容来看,我上面的方法中至少有一个应该可以工作... 为什么我不能在部署脚本中设置这个应用程序设置/环境变量?
更新
根据this question,我无法在 .deployment 文件中设置应用程序设置。这与网上其他文章有所不同,但仍然没有解释为什么 SET 在 deploy.cmd 文件中不起作用。
文件
.deployment
[config]
;Change node version to change npm version to avoid long-file-name situations
WEBSITE_NODE_DEFAULT_VERSION = 6.7.0
command = deploy.cmd
deploy.cmd
(REDACTED - default stuff)
echo :: 4. NPM Install (borrowing from https://stackoverflow.com/questions/39480274/how-do-i-run-gulp-js-in-my-asp-net-core-project-when-deploying-to-azure-using-gi)
IF EXIST "%DEPLOYMENT_TARGET%\package.json" (
:: Set the node version. Tried this in .deployment, but that didn't work.
:: HELP! Why isn't this working???
echo %WEBSITE_NODE_DEFAULT_VERSION% before set
:: Output: "4.4.7 before set"
SET WEBSITE_NODE_DEFAULT_VERSION=6.7.0
echo %WEBSITE_NODE_DEFAULT_VERSION% after set
:: Output: "4.4.7 after set"
pushd "%DEPLOYMENT_TARGET%"
call :ExecuteCmd npm install
IF !ERRORLEVEL! NEQ 0 goto error
popd
)
echo :: 5. Bower Install (borrowing from https://stackoverflow.com/a/28591913/1876622)
IF EXIST "%DEPLOYMENT_TARGET%\bower.json" (
pushd "%DEPLOYMENT_TARGET%"
call :ExecuteCmd bower install
IF !ERRORLEVEL! NEQ 0 goto error
popd
)
echo :: 6. Run Gulp (borrowed from https://blogs.msdn.microsoft.com/azureossds/2016/08/12/run-npm-bower-composer-gulp-grunt-in-azure-app-services-during-deployment/)
IF EXIST "%DEPLOYMENT_TARGET%\gulpfile.js" (
pushd "%DEPLOYMENT_TARGET%"
call :ExecuteCmd gulp
IF !ERRORLEVEL! NEQ 0 goto error
popd
)
【问题讨论】:
标签: azure npm asp.net-mvc-5 gulp bower