Download - Capacitación TFS - Build
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