capacitación tfs - build
DESCRIPTION
Presentación sobre Build de una capacitación teórico-práctica de cuatro días sobre Microsoft TFS que di a desarrolladores, analistas funcionales, testers y PMs. Presentation about Build of a both theoretical and practical training course of four days on Microsft TFS given to developers, functional analysts, testers and PMs.TRANSCRIPT
www.tecnosoftware.com.ar
Build
TFS para equipos de desarrollo
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Agenda• Conceptos
− TFS Build (Build Automation)
−MSBuild • Componentes • Configuraciones para otras tecnologías (VB)
−MSBuild en TFS• Build Definitions
• Demo de Build• Resumen
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Repaso: Proceso de Check-In
1212V5V5
991212441212
Changeset 12
WorkItem 158
ValidarPolíticas
1
Motor de Políticas de Checkin
Motor de Políticas de Checkin
Pru
ebas
Pru
ebas
Work
Ite
ms
Work
Ite
ms
Pers
on
aliz
ada
Pers
on
aliz
ada
Anális
is E
státi
coA
nális
is E
státi
co
PublicarCambios
2
Evento de Checkin
ActualizarWork Items
3
Envío de Mail
4
Link
Workspace
Build YAutomatización de Build
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Team BuildEjecución de un build
Obtener fuentes del TFS
Generar Build Report y notificar
Publicar el Build Output
Actualizar Work Items
Build (incluido el Code Analysis)
Correr Tests y obtener Coverage
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Team BuildArquitectura
Cliente Team Foundation
Capa de Aplicación Servidor de
Build
Crear build type Iniciar build Ver Reportes
Team Build Web Services
MSBuild
Recurso compartid
o
Capa de Datos Código Work items Team Build data
Team Foundatio
n warehous
e
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
ConceptosBuild es el conjunto de pasos necesarios para obtener un producto de software. No se limita a compilar!
Build automation es el acto de automatizar este conjunto de pasos, generalmente relacionado con:• compilar codigo fuente• armado de paquetes o versiones• ejecucion de pruebas• despliegue en ambientes de testing y/o producción• generación de documentación
El objetivo es lograr que estas tareas sean repetibles de manera consistente, y lo mejor, es que podamos delegarlo a una herramienta que lo haga por nosotros
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Integración Continua• Práctica de desarrollo de software donde los
miembros de un equipo integran su trabajo frecuentemente, al menos una vez por día.
• Cada integración es verificada por un build automatizado para detectar problemas de integración tan pronto como sea posible.
• Permite al equipo de QA realizar verificaciones tempranas del producto sin depender de despliegues manuales.
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Nightly Build• Consiste en ejecutar el proceso completo de Build
todas las noches con el objetivo de asegurar que el sistema se encuentra en estado consistente.
• El resultado de un nightly-build debe ser un entegable concreto, capaz de ser deployado.
• Ventajas:−Comenzar a trabajar todos los días sobre suelo firme.−Si ocurren problemas de integración, saber exactamente la
causa para solucionarlo cuanto antes
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Unit Testing
• Procedimiento usado para validar el correcto funcionamiento de un módulo de código (clase o componente)
• Codificar casos de prueba para cada una de las funcionalidades y métodos−Se prueba cada parte por separado para verificar que cada
parte funciona correctamente
−Si un cambio provoca una regresión, ésta puede ser rápidamente identificada y corregida
−Cada caso de prueba es independiente del resto (principalmente a nivel de datos)
• Realizado por desarrolladores (no por usuarios)
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Unit Testing - Ventajas
• Facilita el Cambio−Permite refactorizar el código garantizando que
el módulo aún funciona correctamente• Simplifica la Integración
−Pueden ser utilizados en un testing de tipo bottom-up (se verifican primero las partes y luego al suma de ellas)
• Documentación−Proveen una especie de “documentación viva”. −Describen cómo se debe usar (y cómo no) el
módulo de código y su API−Evolucionan a medida que evoluciona el código
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Unit Testing - Desventajas
• Sólo se verifica la funcionalidad de las pruebas unitarias
• No es posible capturar todos los errores−Errores de integración−Problemas de performance
• No es simple anticipar todas las posibles combinaciones de entradas a la unidad que se está probando
• No permite probar todas las capas fácilmente
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Unit Testing en TFS
[TestClass]public class CuentasTest{ [TestMethod] public void SaldoTest(){
Cuenta cta = new Cuenta();cta.Depositar(1000);Assert.AreEqual(1000,
cta.Saldo);}
}
Atributo que agrupa Tests
Atributo que define un Test
Evaluaciones de condiciones funcionales del test
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
using Nunit.Framework;
[TestFixture]• public class CuentasTest{
[Test]• public void SaldoTest(){• Cuenta cta = new Cuenta();• cta.Depositar(1000);• Assert.AreEqual(1000,
cta.Saldo);• }
}
Unit Test con NUnit
Namespace de Nunit
Atributo que agrupa Tests
Atributo que define un Test
Evaluaciones de condiciones funcionales del test
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Code Coverage
• Es una actividad propia del testing Caja Blanca
• Utilizada en conjunto con Unit Testing• Su resultado representa el porcentaje de
alcance sobre el software objetivo de las pruebas unitarias−El cálculo se basa en el conjunto de líneas de
código fuente que fueron alcanzadas por la ejecución de las pruebas unitarias
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Tipos de Code Coverage
• Function coverage – Fueron ejecutadas todas las funciones del programa?
• Statement coverage – Fue ejecutada cada línea del archivo fuente?
• Condition coverage – Fueron ejecutadas todas las condiciones de evaluación y sus caminos alternativos?
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Build Automation
• Utiliza como motor de compilación a MSBuild.
• Trabaja sobre Team Projects.• Se configura mediante Build Definitions
utilizando los Build Agents.
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
MSBuild• Plataforma de compilación• Configuraciones mediante archivo XML
−*.sln y *.*proj• Contenido
−Elementos−Propiedades−Tareas−Destinos
• Extendido por la community agregando nuevas tareas que facilitan el tratamiento de otras plataformas.−http://msbuildextensionpack.codeplex.com/
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Elementos (Items)• Representan entradas en el sistema de
generación.• Se agrupan en colecciones de elementos basadas
en los nombres de colección definidos por el usuario.
• Se hace referencia a las colecciones de elementos mediante la sintaxis @(NombreColeccion).
• Ej: @(Archivos)<ItemGroup>
<Archivos Include="pics/sunny.png;pics/rain.png" />
<Archivos Include="pics/**/*.png" />
</ItemGroup>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Propiedades• Representan pares clave/valor que se pueden
utilizar para configurar.• Se declaran creando un elemento con el nombre
de la propiedad como elemento secundario de un elemento PropertyGroup.
• Se hace referencia a las propiedades con la sintaxis $(PropertyName).
• Ej: $(Foo)
<PropertyGroup>
<Foo>Bar</Foo>
</PropertyGroup>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Elementos vs Propiedades
• Los elementos se almacenan en colecciones, mientras que las propiedades contienen un valor escalar único.
• Los elementos no se pueden quitar de las colecciones de elementos, mientras que se puede modificar el valor de las propiedades una vez definido.
• Los elementos pueden contener metadatos y utilizar la notación %(ItemMetadata), mientras que las propiedades no pueden.
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Tareas
• Las tareas son unidades reutilizables de código ejecutable.
• MSBuild se distribuye con un gran número de tareas comunes, como Copy, MakeDir y Error.
• Listado de tareas:− http://msdn.microsoft.com/es-es/library/7z253716(v=vs.90).aspx
• Ejemplo:<MakeDir Directories="$(BuildDir)" />
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Destinos (Targets)
• Unidad mínima de ejecución• Agrupan tareas en un orden particular• Exponen secciones del archivo de proyecto como
puntos de entrada en el proceso de generación
<Target Name=“CrearCarpetas">
<MakeDir Directories="$(BuildDir)" />
</Target>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Dependencia de Targets
• Los destinos pueden describir relaciones entre ellos y llevar a cabo análisis de dependencia.<Target Name=“Tarea1“>
...
</Target>
<Target Name=“Tarea2“>
...
</Target>
<Target Name="Copiar“ DependsOnTargets=“Tarea1;Tarea2" >
...
</Target>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Condiciones
• MSBuild admite condiciones−'stringA' == 'stringB‘−'stringA' != 'stringB‘−<, >, <=, >=−Exists('stringA')−! , And, Or
• Agrupaciones con ( )• Ejemplo
<Error Text="Error al compilar" Condition="'$(ErrorCode)‘ > '0'" />
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Elemento Choose
• El elemento Choose contiene una serie de elementos When con atributos Condition que se comprueban de forma ordenada de arriba abajo hasta que uno aparece evaluado como true.
• Si más de un elemento When resulta evaluado como true, sólo se utilizará el primero.
• Se evaluará un elemento Otherwise, en caso de encontrarse presente, si ninguna condición en un elemento When resulta evaluada como true.
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Elemento Choose
• Ejemplo
<Choose>
<When Condition=" '$(Configuration)'=='Debug' ">
...
</When>
<When Condition=" '$(Configuration)'=='retail' ">
...
</When>
</Choose>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Tarea Exec
• Ejecuta el programa o comando especificado con los argumentos especificados.−http://msdn.microsoft.com/es-es/library/x8zx72cd(v=vs.90
).aspx<Target Name="EjecutarBat">
<Exec Command='"ejecutar.bat"' ContinueOnError='true'>
<Output TaskParameter="ExitCode“ PropertyName="ErrorCode"/>
</Exec>
<Message Text="The exit code is $(ErrorCode)"/>
</Target>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Registrar librerías
• Mediante la tarea Exec se ejecuta el comando:−regsvr32
• Parámetros−/s Sin notificación−/u Quitar del registro
• Ejemplo<Target Name="RegisterProjects">
<Message Text=“Registrando dlls..."/>
<Exec Command="regsvr32 /s nombredll.dll"/>
</Target>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Extension pack
• Incluye tareas adicionales.• Se deben incluir las extension pack.
−http://msbuildextensionpack.codeplex.com/• Ejemplos
−Compilar VB6
−Comprimir
<MSBuild.ExtensionPack.VisualStudio.VB6 TaskAction="Build" Projects="@(Item_Group)"/>
<MSBuild.ExtensionPack.Compression.Zip TaskAction="Create" CompressFiles="@(FilesToZip)" ZipFileName="C:\newZipByFile.zip"/>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Ejecución de MSBuild
• Ejecución por línea de comando:
• Las opciones de la línea de comandos permiten establecer propiedades, ejecutar destinos específicos y especificar registradores.
• Por ejemplo, se ejecuta el archivo MyProj.proj con la propiedad Configuration establecida en Debug.
MSBuild.exe MyProj.proj /property:Configuration=Debug
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Ejemplo<Project ToolsVersion="3.5" DefaultTargets="CompilarProyectos" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="compilarProyecto1"> <Exec Command='"proyecto1.bat"' ContinueOnError='true'> <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/> </Exec> <Message Text="Compilacion Proyecto 1 / Exit code: $(ErrorCode)"/> <Error Text="Error while executing BAT file" Condition="'$(ErrorCode)' > '0'" /> <OnError ExecuteTargets="MessageErrorHandler"/> </Target> <Target Name="compilarProyecto2"> <Exec Command='"proyecto2.bat"' ContinueOnError='true'> <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/> </Exec> <Message Text="Compilacion Proyecto 2 / Exit code: $(ErrorCode)"/> <Error Text="Error while executing BAT file" Condition="'$(ErrorCode)' > '0'" /> <OnError ExecuteTargets="MessageErrorHandler"/> </Target> <Target Name="CompilarProyectos" DependsOnTargets="compilarProyecto1;compilarProyecto2"> </Target> <!--Error Handler--> <Target Name="MessageErrorHandler"> <Message Text="Ha ocurrido un error al ejecutar la compilacion. Por favor revise el log."/> </Target>
</Project>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Build Definitions• Contiene las instrucciones que indican:
−Cual es el código del proyecto a compilar−Como debe ejecutarse−Operaciones adicionales
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Crear Build Definitions
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Listado de Builds
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Reportes
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Target de TFS
• TFS posee targets pre-definidos para realizar las tareas de TFS Build
• Se deben importar en el proyecto:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Sobre-escribir targets de TFS
• Para integrar la compilación VB6 se requiere sobre-escribir las targets nativos de TFS:−CoreCompile
−AfterDropBuild
<Target Name="CoreCompile" DependsOnTargets="CompileVB6Projects"></Target>
<Target Name="AfterDropBuild" DependsOnTargets="ZipBin;Copiar;Limpiar"></Target>
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Propiedades en TFS
• Pares de clave y valor que puede utilizar para configurar las compilaciones de TFS.−http
://msdn.microsoft.com/en-us/library/aa337598(v=vs.90).aspx
• Estas propiedades se pueden modificar en el archivo TFSBuild.proj para:−Pasar valores a tareas y destinos de TFS Build−Invalidar algunas acciones de compilación
• Ejemplos−RunTest−SkipWorkItemCreation
Demo de Build Server con TFS
Av. Belgrano 687 7P C1092AAG Buenos Aires, Argentina | Tel. (+54 11) 5128-3000 | www.tecnosoftware.com.ar
Resumen• Build como proceso repetitivo• Distintos escenarios de Build
−Integrado al check-in, Unit testing, nightly build, code coverage
−Build por branch, build específicos• TFS Build y MS Build
Consultas
Av. Belgrano 687 Piso 7º - Buenos Aires, Argentina
Teléfono: (+5411) 5128-3000
www.tecnosoftware.com.ar