1+ @ if " %SCM_TRACE_LEVEL% " NEQ " 4" @ echo off
2+
3+ :: ----------------------
4+ :: KUDU Deployment Script
5+ :: Version: 1.0.6
6+ :: ----------------------
7+
8+ :: Prerequisites
9+ :: -------------
10+
11+ :: Verify node.js installed
12+ where node 2 > nul > nul
13+ IF %ERRORLEVEL% NEQ 0 (
14+ echo Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment.
15+ goto error
16+ )
17+
18+ :: Setup
19+ :: -----
20+
21+ setlocal enabledelayedexpansion
22+
23+ SET ARTIFACTS = %~dp0 %..\artifacts
24+
25+ IF NOT DEFINED DEPLOYMENT_SOURCE (
26+ SET DEPLOYMENT_SOURCE = %~dp0 %.
27+ )
28+
29+ IF NOT DEFINED DEPLOYMENT_TARGET (
30+ SET DEPLOYMENT_TARGET = %ARTIFACTS% \wwwroot
31+ )
32+
33+ IF NOT DEFINED NEXT_MANIFEST_PATH (
34+ SET NEXT_MANIFEST_PATH = %ARTIFACTS% \manifest
35+
36+ IF NOT DEFINED PREVIOUS_MANIFEST_PATH (
37+ SET PREVIOUS_MANIFEST_PATH = %ARTIFACTS% \manifest
38+ )
39+ )
40+
41+ IF NOT DEFINED KUDU_SYNC_CMD (
42+ :: Install kudu sync
43+ echo Installing Kudu Sync
44+ call npm install kudusync -g --silent
45+ IF !ERRORLEVEL! NEQ 0 goto error
46+
47+ :: Locally just running "kuduSync" would also work
48+ SET KUDU_SYNC_CMD = %appdata% \npm\kuduSync.cmd
49+ )
50+ goto Deployment
51+
52+ :: Utility Functions
53+ :: -----------------
54+
55+ :SelectNodeVersion
56+
57+ IF DEFINED KUDU_SELECT_NODE_VERSION_CMD (
58+ :: The following are done only on Windows Azure Websites environment
59+ call %KUDU_SELECT_NODE_VERSION_CMD% " %DEPLOYMENT_SOURCE% " " %DEPLOYMENT_TARGET% " " %DEPLOYMENT_TEMP% "
60+ IF !ERRORLEVEL! NEQ 0 goto error
61+
62+ IF EXIST " %DEPLOYMENT_TEMP% \__nodeVersion.tmp" (
63+ SET /p NODE_EXE = < " %DEPLOYMENT_TEMP% \__nodeVersion.tmp"
64+ IF !ERRORLEVEL! NEQ 0 goto error
65+ )
66+
67+ IF EXIST " %DEPLOYMENT_TEMP% \__npmVersion.tmp" (
68+ SET /p NPM_JS_PATH = < " %DEPLOYMENT_TEMP% \__npmVersion.tmp"
69+ IF !ERRORLEVEL! NEQ 0 goto error
70+ )
71+
72+ IF NOT DEFINED NODE_EXE (
73+ SET NODE_EXE = node
74+ )
75+
76+ SET NPM_CMD = " !NODE_EXE! " " !NPM_JS_PATH! "
77+ ) ELSE (
78+ SET NPM_CMD = npm
79+ SET NODE_EXE = node
80+ )
81+
82+ goto :EOF
83+
84+ :: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
85+ :: Deployment
86+ :: ----------
87+
88+ :Deployment
89+ echo Handling node.js deployment.
90+
91+ :: 1. KuduSync
92+ IF /I " %IN_PLACE_DEPLOYMENT% " NEQ " 1" (
93+ 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"
94+ IF !ERRORLEVEL! NEQ 0 goto error
95+ )
96+
97+ :: 2. Select node version
98+ call :SelectNodeVersion
99+
100+ :: 3. Install npm packages. Attempt up to 3 times in the event of failures
101+ IF EXIST " %DEPLOYMENT_TARGET% \package.json" (
102+ pushd " %DEPLOYMENT_TARGET% "
103+ FOR /L %%A IN (1,1,3) DO (
104+ call !NPM_CMD! install --production
105+ IF !ERRORLEVEL! == 0 goto npmInstallSuccess
106+ IF %%A NEQ 3 SLEEP 5
107+ )
108+ goto error
109+ :npmInstallSuccess
110+ popd
111+ )
112+
113+ :: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
114+
115+ :: Post deployment stub
116+ IF DEFINED POST_DEPLOYMENT_ACTION call " %POST_DEPLOYMENT_ACTION% "
117+ IF !ERRORLEVEL! NEQ 0 goto error
118+
119+ goto end
120+
121+ :: Execute command routine that will echo out when error
122+ :ExecuteCmd
123+ setlocal
124+ set _CMD_ = %*
125+ call %_CMD_%
126+ if " %ERRORLEVEL% " NEQ " 0" echo Failed exitCode=%ERRORLEVEL% , command=%_CMD_%
127+ exit /b %ERRORLEVEL%
128+
129+ :error
130+ endlocal
131+ echo An error has occurred during web site deployment.
132+ call :exitSetErrorLevel
133+ call :exitFromFunction 2 > nul
134+
135+ :exitSetErrorLevel
136+ exit /b 1
137+
138+ :exitFromFunction
139+ ()
140+
141+ :end
142+ endlocal
143+ echo Finished successfully.
0 commit comments