1 | @if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off
|
2 |
|
3 | :: ----------------------
|
4 | :: KUDU Deployment Script
|
5 | :: Version: 1.0.8
|
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 DEPLOYMENT_INTERMEDIATE (
|
34 | SET DEPLOYMENT_INTERMEDIATE=!DEPLOYMENT_TARGET!\..\intermediate
|
35 |
|
36 | IF NOT EXIST "!DEPLOYMENT_INTERMEDIATE!" (
|
37 | SET CLEAN_LOCAL_DEPLOYMENT_TEMP=true
|
38 | )
|
39 | )
|
40 |
|
41 | IF NOT DEFINED NEXT_MANIFEST_PATH (
|
42 | SET NEXT_MANIFEST_PATH=%ARTIFACTS%\manifest
|
43 |
|
44 | IF NOT DEFINED PREVIOUS_MANIFEST_PATH (
|
45 | SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\manifest
|
46 | )
|
47 | )
|
48 |
|
49 | IF NOT DEFINED KUDU_SYNC_CMD (
|
50 | :: Install kudu sync
|
51 | echo Installing Kudu Sync
|
52 | call npm install kudusync -g --silent
|
53 | IF !ERRORLEVEL! NEQ 0 goto error
|
54 |
|
55 | :: Locally just running "kuduSync" would also work
|
56 | SET KUDU_SYNC_CMD=%appdata%\npm\kuduSync.cmd
|
57 | )
|
58 |
|
59 | IF NOT DEFINED DEPLOYMENT_TEMP (
|
60 | SET DEPLOYMENT_TEMP=%temp%\___deployTemp%random%
|
61 | SET CLEAN_LOCAL_DEPLOYMENT_TEMP=true
|
62 | )
|
63 |
|
64 | IF DEFINED CLEAN_LOCAL_DEPLOYMENT_TEMP (
|
65 | IF EXIST "%DEPLOYMENT_TEMP%" rd /s /q "%DEPLOYMENT_TEMP%"
|
66 | mkdir "%DEPLOYMENT_TEMP%"
|
67 |
|
68 | IF EXIST "%DEPLOYMENT_INTERMEDIATE%" rd /s /q "%DEPLOYMENT_INTERMEDIATE%"
|
69 | mkdir "%DEPLOYMENT_INTERMEDIATE%"
|
70 | )
|
71 |
|
72 | IF NOT DEFINED NODE_EXE SET NODE_EXE=node
|
73 | IF NOT DEFINED NPM_CMD SET NPM_CMD=npm
|
74 |
|
75 | goto Deployment
|
76 |
|
77 | :: Utility Functions
|
78 | :: -----------------
|
79 |
|
80 | :SelectNodeVersion
|
81 |
|
82 | IF DEFINED KUDU_SELECT_NODE_VERSION_CMD (
|
83 | :: The following are done only on Windows Azure Websites environment
|
84 | call %KUDU_SELECT_NODE_VERSION_CMD% "%DEPLOYMENT_SOURCE%" "%DEPLOYMENT_TARGET%" "%DEPLOYMENT_TEMP%"
|
85 | IF !ERRORLEVEL! NEQ 0 goto error
|
86 |
|
87 | IF EXIST "%DEPLOYMENT_TEMP%\__nodeVersion.tmp" (
|
88 | SET /p NODE_EXE=<"%DEPLOYMENT_TEMP%\__nodeVersion.tmp"
|
89 | IF !ERRORLEVEL! NEQ 0 goto error
|
90 | )
|
91 |
|
92 | IF EXIST "%DEPLOYMENT_TEMP%\__npmVersion.tmp" (
|
93 | SET /p NPM_JS_PATH=<"%DEPLOYMENT_TEMP%\__npmVersion.tmp"
|
94 | IF !ERRORLEVEL! NEQ 0 goto error
|
95 | )
|
96 |
|
97 | IF NOT DEFINED NODE_EXE (
|
98 | SET NODE_EXE=node
|
99 | )
|
100 |
|
101 | SET NPM_CMD="!NODE_EXE!" "!NPM_JS_PATH!"
|
102 | ) ELSE (
|
103 | SET NPM_CMD=npm
|
104 | SET NODE_EXE=node
|
105 | )
|
106 |
|
107 | goto :EOF
|
108 |
|
109 | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
110 | :: Deployment
|
111 | :: ----------
|
112 |
|
113 | :Deployment
|
114 | echo Handling node.js deployment.
|
115 |
|
116 | ECHO ARTIFACTS=%ARTIFACTS%
|
117 | ECHO DEPLOYMENT_TEMP=%DEPLOYMENT_TEMP%
|
118 | ECHO CLEAN_LOCAL_DEPLOYMENT_TEMP=%CLEAN_LOCAL_DEPLOYMENT_TEMP%
|
119 | ECHO KUDU_SYNC_CMD=%KUDU_SYNC_CMD%
|
120 | ECHO DEPLOYMENT_SOURCE=%DEPLOYMENT_SOURCE%
|
121 | ECHO DEPLOYMENT_INTERMEDIATE=%DEPLOYMENT_INTERMEDIATE%
|
122 | ECHO DEPLOYMENT_TARGET=%DEPLOYMENT_TARGET%
|
123 | ECHO NEXT_MANIFEST_PATH=%NEXT_MANIFEST_PATH%
|
124 | ECHO PREVIOUS_MANIFEST_PATH=%PREVIOUS_MANIFEST_PATH%
|
125 |
|
126 | :: 1. KuduSync source files to intermediate folder
|
127 | call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%" -t "%DEPLOYMENT_INTERMEDIATE%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd;.vscode"
|
128 | IF !ERRORLEVEL! NEQ 0 goto error
|
129 |
|
130 | :: 2. Install npm packages
|
131 | pushd "%DEPLOYMENT_INTERMEDIATE%"
|
132 |
|
133 | call :ExecuteCmd !NPM_CMD! install --quiet --ignore-scripts
|
134 | IF !ERRORLEVEL! NEQ 0 goto error
|
135 |
|
136 | call :ExecuteCmd !NPM_CMD! dedupe
|
137 | IF !ERRORLEVEL! NEQ 0 goto error
|
138 |
|
139 | call :ExecuteCmd !NPM_CMD! run rebuild
|
140 | IF !ERRORLEVEL! NEQ 0 goto error
|
141 |
|
142 | popd
|
143 |
|
144 | :: 3. KuduSync from intermediate folder to target folder
|
145 | call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_INTERMEDIATE%\dist\website" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%-intermediate" -p "%PREVIOUS_MANIFEST_PATH%-intermediate" -i ".git;.hg;.deployment;deploy.cmd"
|
146 | IF !ERRORLEVEL! NEQ 0 goto error
|
147 |
|
148 | :: 4. Select node version
|
149 | call :SelectNodeVersion
|
150 |
|
151 | ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
152 | goto end
|
153 |
|
154 | :: Execute command routine that will echo out when error
|
155 | :ExecuteCmd
|
156 | setlocal
|
157 | set _CMD_=%*
|
158 | call %_CMD_%
|
159 | if "%ERRORLEVEL%" NEQ "0" echo Failed exitCode=%ERRORLEVEL%, command=%_CMD_%
|
160 | exit /b %ERRORLEVEL%
|
161 |
|
162 | :error
|
163 | endlocal
|
164 | echo An error has occurred during web site deployment.
|
165 | call :exitSetErrorLevel
|
166 | call :exitFromFunction 2>nul
|
167 |
|
168 | :exitSetErrorLevel
|
169 | exit /b 1
|
170 |
|
171 | :exitFromFunction
|
172 | ()
|
173 |
|
174 | :end
|
175 | endlocal
|
176 | echo Finished successfully.
|