Introducción
En uno de los posts de la serie dedicada al control de versiones que estoy haciendo ya comente la característica de que nos ofrecía Team Foundation Server llamada Shelve. También comente que me parecía una buena práctica el hacer shelving a diario, mas que nada para no perder el código fuente que estuviésemos desarrollando si le pasaba algo a nuestro ordenador. Pues bien, en este post os voy a contar mis impresiones acerca de dos herramientas que permiten hacer shelving automático. El problema es que ambas solo funcionan con Visual Studio Team System 2008, así que los usuarios de la versión 2005 tendrán que seguir recordando hacer shelve cuando se marchen a casa.
Quick Shelve 1.0
Esta pequeña herramienta, como ya os he comentado, nos permite hacer shelving, en este caso de todos los workspaces de la máquina desde donde se ejecuta la aplicación. Automáticamente crea un Shelveset al que llama "QuickShelve of <...>" seguido del nombre del WorkSpace del que se esta haciendo el shelve y si ya existe un Shelveset con el mismo nombre lo sobrescribe.
Esta herramienta es de línea de comandos y no tiene ningún parámetro o modificador a la hora de ejecutarla lo cual me parece un poco limitado, por poner un ejemplo, quizás no queremos hacer shelve de todos los Workspaces, una buena opción seria poder pasarle como parámetro el nombre del WorkSpace. Otra opción seria poder indicarle si queremos que sobrescriba el shelve si encuentra un shelve existente con el mismo nombre. Aun así cumple el objetivo perfectamente, y no he tenido ningún problema usándola.
Autor: William Bartholomew
Url del proyecto: http://www.codeplex.com/quickshelve
Versión probada: 1.0
TFS AutoShelve 1.0
Esta otra herramienta en concepto es muy similar a la anterior pero, a diferencia de QuickShelve, tiene mas posibilidades de ser configurada. La configuración se realiza a través de un fichero .config, lo cual no me termina de convencer, yo preferiría parámetros de entrada al invocar la herramienta desde línea de comando. Pero bueno, tampoco tenemos que ser muy duros ya que aunque sea de esta forma nos permite configurar:
- Servidor SMTP (utilizado para enviar un correo en caso de que se produzca un error)
- Nombre del Shelveset
- Direcciones de correo (a las que enviar la información si se produce un error)
- Servidor de Team Foundation Server
En definitiva, TFS AutoShelve cumple la misma funcionalidad que QuickShelve y además ofrece la posibilidad de configurar los parámetros mas importantes. También es un punto a su favor el sistema de envío de correos electrónicos en caso de que ocurra algún problema al crear el Shelveset. Una cosa que he olvidado comentar, esta herramienta también sobrescribe los Shelvesets existentes que tengan el mismo nombre.
Autor: John W Powell
Url del proyecto: http://www.codeplex.com/TFSAutoShelve
Versión probada: 1.0
Automatización
Una vez que hemos revisado estas dos herramientas y hemos hecho algunas pruebas de ejecución manual, llega el momento de la automatización. Como podréis imaginar, la forma mas sencilla de ejecutar una tarea sin que nos tengamos que acordar es usar las Tareas Programadas de Windows. Si eres de los que dejas tu equipo de desarrollo encendido durante largos periodos de tiempo, la mejor opción es crear una tarea programada que se ejecute antes que el backup del servidor TFS para que los cambios que hayas realizado sean incluidos en la copia de seguridad. Dado que crear una tarea programada es extremadamente sencillo creo que no es necesario explicar como hacerlo.
Por otro lado, esta parte es mas divertida, si eres un consultor que utiliza un ordenador portátil y normalmente se lo lleva a casa cuando acaba la jornada laboral seria interesante el que se crease un Shelveset cada vez que cierras tu sesión o apagas el ordenador, y esta forma si que voy a explicarla por que no es tan habitual como la creación de una tarea programada.
Para ejecutar una tarea cuando se este cerrando la sesión tenemos que añadir un Script a nivel de usuario utilizando el Local Group Policy Editor. La forma mas rápida de acceder a este editor es escribiendo 'gpedit.msc' desde la ventana de ejecutar. Una vez se haya abierto esta ventana debemos añadir el Script de Logoff seleccionando el grupo "Scripts (Logon/Logoff)" que se encuentra bajo la rama "User Configuration >> Windows Settings" y haciendo doble click sobre el elemento "Logoff" que se encuentra en la parte derecha de la pantalla.
Tras hacer doble click sobre "Logoff" nos aparece una pantalla con la lista de Scripts que se ejecutan al realizar cerrar la sesión, por lo que lo único que tenemos que hacer es añadir una de las herramientas que hemos visto a la lista. Podemos hacer una llamada directamente al .exe o como yo he hecho. crear un .cmd o .bat para encapsular la llamada, aunque al no tener que pasarle parámetros no sería necesario.
Con esto quedaría cubierto el tema de la automatización del Shelving y estaríamos creando un Shelveset con los cambios que hayamos hecho cada vez que hagamos logoff o apaguemos nuestro ordenador. Solo como nota aclaratoria, hemos definido esta política a nivel de usuario y como un script de logoff porque si lo hiciesemos a nivel de equipo y como script de Shutdown el usuario con el que se ejecutaría la tarea no sería nuestro usuario, sino una cuenta del local de sistema, por lo que no podríamos acceder al servidor de TFS con esas credenciales y mucho menos crear un Shelveset porque ese usuario no posee ningún Workspace.