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 部署脚本的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 1.0 部署 HTTPS

NET Core 1.0

ASP.NET Core 1.0 基础与应用启动

.NET Core & ASP.NET Core 1.0

ASP.NET 5 改名 ASP.NET Core 1.0

ASP.NET Core 1.0 中使用Log日志