Mostrando entradas con la etiqueta Windows Azure. Mostrar todas las entradas
Mostrando entradas con la etiqueta Windows Azure. Mostrar todas las entradas

jueves, 7 de julio de 2016

Publicar WebJob con WebDeploy

Los websites de Azure (o como quiera que se llamen ahora) son un buen invento. Se publican fácilmente desde Visual Studio y tienen un montón de opciones útiles, entre ellas los WebJobs. Sin embargo, después de crear un slot de staging, algo no funcionaba como esperaba en relación al WebJob. El problema era que el WebJob no formaba parte del proyecto, es decir, se estaba creando a mano desde el portal de Azure y sólo se había hecho inicialmente en “production”, con lo que al hacer el swap de “staging” a “production” se estaba perdiendo y al volver a publicar en staging desde Visual Studio no se agregaba… resultado, un WebJob desaparecido en combate porque forma parte del slot.

Una solución sería crear el WebJob manualmente en ambos entornos (“staging” y “production”) y no olvidar activar la opción “Exclude files from the App_Data folder” durante la publicación a través de Web Deploy (un WebJob se guarda en el directorio App_Data). En cualquier caso, realmente el problema es no haber tratado al WebJob como parte del proyecto. Muy clarificador al respecto esta respuesta en stackoverflow http://stackoverflow.com/a/31079730 “Note it is a bad practice to deploy a WebJob directly and not as part of your website files/repository, this is probably the cause of issues you are having.”

Está claro, el WebJob debe ser parte del proyecto.

Si el WebJob es una aplicación de consola hubiera seguido esta guía https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-deploy-webjobs/ pero el WebJob es Node.js (que tampoco sé si habrá algo de serie para facilitar la vida, pero en una lectura rápida parecería más orientado sólo a aplicación de consola, lo mismo en 2 días me desdigo…).

Finalmente, la pregunta es ¿Cómo hacer que en App_Data esté el WebJob preparado para su publicación a través de Visual Studio? Pues con nuestro amigo MSBuild.

En mi caso he optado por agregar código al fichero .pubxml (publicación).

Primero, restaurar los paquetes de Node, invocando un target antes de la publicación http://stackoverflow.com/a/12920499

  
    
      CustomBeforePublish;
      $(PipelineDependsOn);
    
  
  
    
  

La verdad es que esto se podría haber evitado usando Grunt, Gulp o similar, que está perfectamente integrado con Visual Studio, pero sólo quería tener la carpeta node_modules cuando fuera a publicar, no antes.

En cualquier caso, con esto me aseguro de que todas las dependencias están ahí, porque lógicamente no pienso en agregar estos ficheros al .csproj ni subirlos al control de código fuente ni nada de eso.

Segundo (y porque la carpeta node_modules no está incluida en el .csproj), copiar estos ficheros en el paquete de publicación http://www.hackthedot.dk/2012/10/adding-extra-files-to-deployment.html

  
    
      
      
        App_Data\jobs\triggered\MyWebJob\node_modules\%(RecursiveDir)%(Filename)%(Extension)
      
    
  
  
    
      IncludeNodeModules;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    
  

Con esto se ha salvado la papeleta, ahora el WebJob forma parte del proyecto y la publicación lo tiene en cuenta.

Para “staging”, agregando la variable de entorno WEBJOBS_STOPPED con el valor 1 me aseguro que en “staging” no se va a ejecutar el WebJob https://github.com/projectkudu/kudu/wiki/Web-jobs#configuration-settings

Claro está que no parece la mejor opción, lo suyo sería menos MSBuild, más tarea Exec y algún sistema de build de cliente, pero por ahora vale.

Un saludo!

miércoles, 29 de septiembre de 2010

Configuración de VS2010 para trabajar con Azure mediante entorno simulado.

Hola!

Este es mi primer post, y he decidido escribir sobre algo con lo que estamos ahora mismo trabajando/investigando: Windows Azure.

¿y qué es eso? pues copieteando a la wikipedia: “Windows Azure Platform de Microsoft  es una plataforma de servicios que ofrece computación en nube, entró en producción el 1 de enero de 2010. "Ofrece una amplia gama de servicios de internet que se pueden consumir tanto desde entornos locales o en entornos de internet" (aunque la plataforma en sí no está disponible para implementar en los entornos locales). Es significativo que es el primer paso de Microsoft en la computación en nube después del lanzamiento de Microsoft Online Services.”

Vamos, a mi modo de ver, un megahosting de Microsoft, perfectamente integrado con todas sus herramientas de desarrollo y que nos permite desplegar aplicaciones en la nube de una manera muy rápida y aparentemente, sencilla… Pero claro, primero tendremos que configurar nuestro entorno de trabajo ¿no?.

Microsoft nos da (que buenos son) la posibilidad de montar un entorno de simulación localmente, gracias a las herramientas de desarrollo de Azure y a su SDK. vamos a ver como montarlo y tener configuradito nuestro querido VS2010.

Vayamos por partes, como dijo no se quien:

  • Descarga e instalación de herramientas y SDK de Azure para VS 2010. (http://www.microsoft.com/windowsazure/). Estas herramientas también se pueden descargar directamente desde el IDE de VS 2010.
  • Si es necesario, instalar los HotFix que Microsoft recomienda.
  • Instalación de SQL Express 2008 en la máquina de desarrollo. Es necesario para que Azure simule su almacenamiento Blob, Queue y Table.

Para comprobar que el entorno de desarrollo y la simulación local de Azure funcionan correctamente, realizaremos los siguientes pasos:

Ejecutaremos el entorno de desarrollo como administrador:

image

Crearemos un proyecto de prueba desde VS 2010. El tipo de proyecto Windows Azure Cloud Service estará disponible después de instalar las herramientas de desarrollo y el SDK.

 

image

Añadiremos al proyecto un WebRole de VB o C#.

 

image

Una vez hecho esto, tendremos (o deberíamos tener) los siguientes elementos en nuestra nueva solución

 

image

A continuación podemos ejecutar el proyecto. El entorno de simulación de Azure se inicializará y tendremos en nuestra área de notificaciones un icono que nos permite comprobar el estado de los componentes de dicho entorno de simulación.

image

¡Nuestro entorno está correctamente configurado!

En lo siguientes post (si el tiempo, las ganas y demás factores alienantes me lo permiten), ampliaré conceptos sobre Azure y la manera de trabajar con él. De momento, palabras como Blob, Qeue, Table y otros conceptos “azurescos” los dejaremos para otro día.

Life is code!!