Nuevo sitio

Nos mudamos a www.f5run.com.ar

martes, 26 de julio de 2011

Super bat para compilar y publicar una aplicación ASP.Net

Publicar una aplicación ASP.Net, puede parecer muy sencillo. Sin embargo, para que la misma se haga siempre igual y que respete siempre los mismos pasos, es recomendable automatizar el proceso de publicación.

Existen varias formas de hacer esto. Personalmente encontré bastante útil armar un .Bat, que básicamente hace lo siguiente:

1. Compila la aplicación en modo Release
2. Ejecuta un test de validación en NUnit
3. Compila las páginas aspx usando aspnet_compiler
4. Une las páginas en una dll usando aspnet_merge
5. Borra los archivos que no deberían publicarse (basicamente los .config)
6. Borra los archivos de más de 45 días (este es un tunnig personal, que sirve cuando se realizan publicaciones con cierta frecuencia)
7. Borra las carpetas vacías
8. Arma un zip
9. Lo sube por ftp

El paso 10 es manual. En mi caso, me conecto vía remote desktop y ejecuto otro bat que descomprime el zip subido y lo copia en la carpeta del sitio.

Este es el .Bat:

@echo off

setlocal
call "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild C:\Source\app.sln /t:Build /p:Configuration=Release
if %errorlevel% gtr 0 goto end


call "c:\Program Files (x86)\NUnit 2.5.9\bin\net-2.0\nunit-console.exe" c:\Source\Test\bin\Test.dll


if %errorlevel% gtr 0 goto end


echo on 


set base=c:\temp\publish
if not exist %base% md %base%
rd /s /q %base%
md %base%


echo compiling to %base%
"c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler" -v / -p C:\Source\Web\ -f -d %base%
if %errorlevel% gtr 0 goto end
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\aspnet_merge" %base% -w app.dll 
if %errorlevel% gtr 0 goto end


endlocal
echo web compiled to %base%
goto makezip:


:errnoparam
echo usage: %0 web
goto end


:errnotfound
echo web %1 not found
goto end


:makezip


cd c:\temp\publish


echo "Borra los archivos que no deberían pasar"
del publish.bat
del *.vbproj
del web.config
del app.config
del c:\temp\publish\Reports\*.rdlc
rd pdftemp /S /Q


echo "Borra los archivos de mas de 45 días"
forfiles /s /M *.* /d -45 /c "cmd /c del /q @path"


echo "Borra las carpetas vacias"
setLocal EnableDelayedExpansion


dir/b/s/ad c:\temp\publish | sort /r > sdlist


for /f "tokens=* delims= " %%d in (sdlist) do (
rd %%d 2>nul
)




del publish.zip
"c:\Program Files\WinRAR\WinRAR.exe" a -r -afzip publish


:ftp
echo "ftp upload"


@echo off
echo user miusuario> ftpcmd.dat
echo mipassword>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo hash>> ftpcmd.dat
echo put c:\temp\publish\publish.zip>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat misitio.com
del ftpcmd.dat


:end
pause

1 comentario:

Anónimo dijo...

Pueden poner esto mismo para VS 2008