2016-10-12 31 views
1

摘要

我试图将一个MVC5 Web应用程序部署到Azure。我需要以编程方式设置WEBSITE_NODE_DEFAULT_VERSION,以确保所有配置都以原子方式包含在回购中。当我尝试在.deploymentdeploy.cmd中设置该应用设置/ env变量时,它会被部署忽略。为什么?在Azure(Kudu)部署期间以编程方式设置应用程序设置/ env变量

背景

我的web应用程序使用亭子的客户端库,以及一个简单的脚本一饮而尽放置最小化库的目标文件夹。我的cshtml文件然后从目标文件夹中使用它们。

根据this comment,我从Azure中删除了部署脚本(.deploymentdeploy.cmd),并调整它以安装bower。

然后下载您的自定义部署脚本。如果你转到https://.scm.azurewebsites.net,然后点击工具 - >下载自定义部署脚本或从D:\ home \ deployment \ tools下载它

我的研究表明npm是默认情况下在Azure Web应用程序部署中可用,并且bower包是预先安装的,但gulp不是。所以,我需要3个自定义命令添加到部署脚本:

  1. NPM安装(需要作出提供一整套)
  2. 凉亭安装(拉下客户端库)
  3. 一饮而尽(管道客户端 - 边库)

this question,我面临的问题是,使用的节点(因此npm)是旧版本。 npm install命令导致文件名太长,这是旧版npm中的一个已知问题。

this set of Kudu runtime settings,我试图设置WEBSITE_NODE_DEFAULT_VERSION6.7.0(在这个问题的时间最晚),因为这将确保最新的NPM也运行。

这是我的问题发生的地方。在运行npm install之前,我在npm install之前添加了一行​​(我试过在等号周围没有空格的变体,包括引号,setlocal等)。前后的输出始终为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 
) 

回答

1

原来,当我创建了Azure的Web应用程序,它预先设定的WEBSITE_NODE_DEFAULT_VERSION门户网站(portal.azure.com)。所以UI取代了我设定应用程序设置的编程请求。

在删除门户中的应用程序设置(下面是删除设置后的屏幕截图)后,我试图通过仅将.virtual放在.deployment文件中再次部署... 成功!

enter image description here

.deployment

[config] 
;Change node version to change npm version to avoid long-file-name situations https://blogs.msdn.microsoft.com/azureossds/2016/04/20/nodejs-and-npm-versions-on-azure-app-services/ 
;Make sure to delete the value in portal.azure.com > Application settings > App settings... because that will override this 
WEBSITE_NODE_DEFAULT_VERSION = 6.7.0 
command = deploy.cmd 
0

为什么来自CMD.EXE文件的原因。

默认情况下,未启用延迟的环境变量扩展。

/V:ON启用延迟环境变量扩展!作为 分隔符。例如,/ V:ON将允许!var!在执行时展开 变量var。 var语法在输入时扩展了变量 ,这在FOR循环内部时是非常不同的事情。

因为WEBSITE_NODE_DEFAULT_VERSION已设置,所以在执行echo语句时不会重新解释它。将此添加到顶部SETLOCAL ENABLEDELAYEDEXPANSION,然后尝试使用echo !WEBSITE_NODE_DEFAULT_VERSION! after set

相关问题