ASP.NET Core 1.0 的 Kudu 部署脚本
Posted
技术标签:
【中文标题】ASP.NET Core 1.0 的 Kudu 部署脚本【英文标题】:Kudu Deployment Script for ASP.NET Core 1.0 【发布时间】:2016-08-01 11:56:18 【问题描述】:我正在使用 Visual Studio Code 开发一个 ASP.NET Core 1.0 应用程序,我不能/不会使用 Visual Studio IDE 中的内置发布工具。我有这个适用于 ASP.NET 5 RC1 (dnx-clr-win-x86.1.0.0-rc1-update1) 但我不知道如何将它更新到 ASP.NET Core 1.0 并且这些工具似乎没有待更新。
对于 ASP.NET 5 RC1,我使用 azure-cli package 生成了一个 deploy.cmd 文件,其中包含以下命令:
azure site deploymentscript --aspNet5 .\server\project.json -p .\server --aspNet5Version "1.0.0-rc1-update1" --aspNet5Runtime clr --aspNet5Architecture x86
我得到了以下deploy.cmd
文件:
@if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off
:: ----------------------
:: KUDU Deployment Script
:: Version: 1.0.6
:: ----------------------
:: Prerequisites
:: -------------
:: Verify node.js installed
where node 2>nul >nul
IF %ERRORLEVEL% NEQ 0 (
echo Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment.
goto error
)
:: Setup
:: -----
setlocal enabledelayedexpansion
SET ARTIFACTS=%~dp0%..\artifacts
IF NOT DEFINED DEPLOYMENT_SOURCE (
SET DEPLOYMENT_SOURCE=%~dp0%.
)
IF NOT DEFINED DEPLOYMENT_TARGET (
SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot
)
IF NOT DEFINED NEXT_MANIFEST_PATH (
SET NEXT_MANIFEST_PATH=%ARTIFACTS%\manifest
IF NOT DEFINED PREVIOUS_MANIFEST_PATH (
SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\manifest
)
)
IF NOT DEFINED KUDU_SYNC_CMD (
:: Install kudu sync
echo Installing Kudu Sync
call npm install kudusync -g --silent
IF !ERRORLEVEL! NEQ 0 goto error
:: Locally just running "kuduSync" would also work
SET KUDU_SYNC_CMD=%appdata%\npm\kuduSync.cmd
)
IF NOT DEFINED DEPLOYMENT_TEMP (
SET DEPLOYMENT_TEMP=%temp%\___deployTemp%random%
SET CLEAN_LOCAL_DEPLOYMENT_TEMP=true
)
IF DEFINED CLEAN_LOCAL_DEPLOYMENT_TEMP (
IF EXIST "%DEPLOYMENT_TEMP%" rd /s /q "%DEPLOYMENT_TEMP%"
mkdir "%DEPLOYMENT_TEMP%"
)
IF DEFINED MSBUILD_PATH goto MsbuildPathDefined
SET MSBUILD_PATH=%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe
:MsbuildPathDefined
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Deployment
:: ----------
echo Handling ASP.NET 5 Web Application deployment.
:: Remove wwwroot if deploying to default location
IF "%DEPLOYMENT_TARGET%" == "%WEBROOT_PATH%" (
FOR /F %%i IN ("%DEPLOYMENT_TARGET%") DO IF "%%~nxi"=="wwwroot" (
SET DEPLOYMENT_TARGET=%%~dpi
)
)
:: Remove trailing slash if present
IF "%DEPLOYMENT_TARGET:~-1%"=="\" (
SET DEPLOYMENT_TARGET=%DEPLOYMENT_TARGET:~0,-1%
)
:: 1. Set DNX Path
set DNVM_CMD_PATH_FILE="%USERPROFILE%\.dnx\temp-set-envvars.cmd"
set DNX_RUNTIME="%USERPROFILE%\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1"
:: 2. Install DNX
call :ExecuteCmd PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';$CmdPathFile='%DNVM_CMD_PATH_FILE%';& '%SCM_DNVM_PS_PATH%' " install 1.0.0-rc1-update1 -arch x86 -r clr %SCM_DNVM_INSTALL_OPTIONS%
IF !ERRORLEVEL! NEQ 0 goto error
:: 3. Run DNU Restore
call %DNX_RUNTIME%\bin\dnu restore "%DEPLOYMENT_SOURCE%" %SCM_DNU_RESTORE_OPTIONS%
IF !ERRORLEVEL! NEQ 0 goto error
:: 4. Run DNU Bundle
call %DNX_RUNTIME%\bin\dnu publish ".\server\project.json" --runtime %DNX_RUNTIME% --out "%DEPLOYMENT_TEMP%" %SCM_DNU_PUBLISH_OPTIONS%
IF !ERRORLEVEL! NEQ 0 goto error
:: 5. KuduSync
call %KUDU_SYNC_CMD% -v 50 -f "%DEPLOYMENT_TEMP%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd"
IF !ERRORLEVEL! NEQ 0 goto error
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Post deployment stub
IF DEFINED POST_DEPLOYMENT_ACTION call "%POST_DEPLOYMENT_ACTION%"
IF !ERRORLEVEL! NEQ 0 goto error
goto end
:: Execute command routine that will echo out when error
:ExecuteCmd
setlocal
set _CMD_=%*
call %_CMD_%
if "%ERRORLEVEL%" NEQ "0" echo Failed exitCode=%ERRORLEVEL%, command=%_CMD_%
exit /b %ERRORLEVEL%
:error
endlocal
echo An error has occurred during web site deployment.
call :exitSetErrorLevel
call :exitFromFunction 2>nul
:exitSetErrorLevel
exit /b 1
:exitFromFunction
()
:end
endlocal
echo Finished successfully.
这适用于 ASP.NET 5 RC1 (dnx-clr-win-x86.1.0.0-rc1-update1),但如何为 ASP.NET Core 1.0 更新它? 有人能指出一个适用于 ASP.NET Core 1.0 的 deploy.cmd 的工作示例吗?
【问题讨论】:
【参考方案1】:Azure CLI 将很快更新,但您现在可以直接使用 kuduscript
npm 包来使用最新版本。使用安装它:
npm install -g kuduscript
然后,您可以使用以下内容生成 ASP.NET Core 脚本(根据需要替换名称):
kuduscript -y --aspNetCore src\AspNetCoreVS\project.json -s AspNetCoreVS.sln
或者,如果您没有解决方案文件,您可以跳过生成稍有不同脚本的文件。
请注意,在常见情况下,Kudu 应该在没有任何脚本的情况下解决问题。只有在更复杂的情况下才需要自定义脚本。
【讨论】:
谢谢!这真的帮助了我。我删除了 .deployment 和 deploy.cmd - Kudu 想出了一个简单的测试 repo。对于我的主项目,我将 ASP.NET Core 应用程序放在一个子文件夹中。在这种情况下,我通过在自定义 .deployment 文件中指定“[config] project = server”将 kudu 指向该项目。以上是关于ASP.NET Core 1.0 的 Kudu 部署脚本的主要内容,如果未能解决你的问题,请参考以下文章