Created
August 16, 2017 20:16
-
-
Save baio/91167a5781841f5855e85d95be77ac80 to your computer and use it in GitHub Desktop.
Deployment script to build F# compiled azure functions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off | |
cls | |
:: ---------------------- | |
:: KUDU Deployment Script | |
:: Version: 1.0.15 | |
:: ---------------------- | |
:: 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 | |
) | |
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
:: Deployment | |
:: ---------- | |
echo Handling function App deployment. | |
if "%SCM_USE_FUNCPACK%" == "1" ( | |
call :DeployWithFuncPack | |
) else ( | |
call :DeployWithoutFuncPack | |
) | |
goto end | |
:DeployWithFuncPack | |
setlocal | |
echo Using funcpack to optimize cold start | |
:: 1. Copy to local storage | |
echo Copying repository files to local storage | |
xcopy "%DEPLOYMENT_SOURCE%" "%DEPLOYMENT_TEMP%" /seyiq | |
IF !ERRORLEVEL! NEQ 0 goto error | |
:: 2. Restore npm | |
call :RestoreNpmPackages "%DEPLOYMENT_TEMP%" | |
:: 3. FuncPack | |
pushd "%DEPLOYMENT_TEMP%" | |
call funcpack pack . | |
IF !ERRORLEVEL! NEQ 0 goto error | |
popd | |
:: 4. KuduSync | |
call :ExecuteCmd "%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;node_modules" | |
IF !ERRORLEVEL! NEQ 0 goto error | |
exit /b %ERRORLEVEL% | |
:DeployWithoutFuncPack | |
setlocal | |
echo Not using funcpack because SCM_USE_FUNCPACK is not set to 1 | |
:: 1. KuduSync | |
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" ( | |
call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd" | |
IF !ERRORLEVEL! NEQ 0 goto error | |
) | |
:: 2. Restore npm | |
call :RestoreNpmPackages "%DEPLOYMENT_TARGET%" | |
:: 3. Build @custom | |
call :BuildCustom "%DEPLOYMENT_TARGET%" | |
exit /b %ERRORLEVEL% | |
:RestoreNpmPackages | |
setlocal | |
echo Restoring npm packages in %1 | |
IF EXIST "%1\package.json" ( | |
pushd "%1" | |
call npm install --production | |
IF !ERRORLEVEL! NEQ 0 goto error | |
popd | |
) | |
FOR /F "tokens=*" %%i IN ('DIR /B %1 /A:D') DO ( | |
IF EXIST "%1\%%i\package.json" ( | |
pushd "%1\%%i" | |
call npm install --production | |
IF !ERRORLEVEL! NEQ 0 goto error | |
popd | |
) | |
) | |
exit /b %ERRORLEVEL% | |
:BuildCustom | |
setlocal | |
echo Custom build in %1 | |
pushd %1 | |
echo Restore paket packages ... | |
call D:\home\site\tools\paket.exe restore | |
IF !ERRORLEVEL! NEQ 0 goto error | |
echo Copy Fake/tools ... | |
::(( must be built after packet restore | |
xcopy D:\home\site\tools\fake packages\FAKE\tools /seyiq | |
echo Run build ... | |
call packages\FAKE\tools\FAKE.exe build.fsx Build | |
IF !ERRORLEVEL! NEQ 0 goto error | |
popd | |
exit /b %ERRORLEVEL% | |
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |
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. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment