Abstract:

En escenarios de testing, por ejemplo pruebas E2E, es necesario desplegar todo el ambiente en los llamados Builds Nocturnos, para verificar la completitud del sistema antes de pasarlo a producción. Las acciones requeridas generalmente se pueden automatizar, pero adquieren cierto nivel de complejidad cuando se trabaja con Windows Azure, en cuyo caso se requiere automatizar el despliegue sobre el Emulador en el cual se harán las pruebas. Esto presenta ciertos retos y aquí veremos cómo solucionarlos.

Nivel: 400 – Avanzado

Dice la corresponsal que ya tenía su .bat con todos los CmdLets de Windows Azure requeridos para su despliegue. Básicamente se requiere ejecutar las siguientes tareas:

1. Apagar los emuladores del fabric y del storage de la máquina a operar
2. Remover todos los despliegues existentes
3. Inicializar ambos emuladores
4. Desplegar el servicio al emulador
5. Hacer un ping al servicio recién desplegado para verificar que quedó correctamente instalado.

Me cuenta ella también que cuando entra a la máquina virtual de pruebas con su usuario y ejecuta el batch con las operaciones descritas anteriormente, este funciona correctamente y despliega los servicios sin ningún problema.

Sin embargo, su objetivo es poder ejecutar el batch remotamente, en este caso a través de la herramienta psexec, que el gran Russinovich nos describe en este post. Desafortunadamente para ella, cuando usa este tool observa que el proceso no es exitoso, aun usando los switch –w (para ejecutar el batch como system y usando –i para seleccionar el id de sesión activa. De hecho me cuenta que hasta usó msbuild para llamar el bat, sin éxito.

Solución:

CSRUN.EXE es un tool de la línea de comandos que se instala con el SDK de Windows Azure. Su función es la de desplegar una aplicación o servicio al emulador de Windows Azure y administrar el servicio allí hosteado. Obviamente vemos que en el ejercicio que se intentó llevar a cabo CSRUN es parte esencial. Desafortunadamente, este tool no funciona correctamente y aparecerá como bloqueado si no es lanzado por una sesión interactiva en la máquina donde se encuentra el emulador. Por eso es que a nuestra apreciada corresponsal su solución le funciona cuando hace login con su usuario, pero no sirve usando psexec. Siendo una buena idea poner el switch –i para identificar el Id de Sesión, esto no basta para que csrun pueda identificar completamente la sesión. Así que es necesario ajustar la variable de sesión _DEVFABRIC_SESSIONID_ con el id de la sesión en la que se está corriendo. Con esto, se solucionará el problema de inmediato, así que solo basta adicionar en el bat el código necesario para ajustar esta variable de sesión.