Integra C I On Continua
Integra C I On Continua
Integra C I On Continua
Integración Continua
Integración Continua 1
“capacitación y guía para el desarrollo de software”
DEFINICIONES ............................................................................................................................................................................. 3
BUILD ........................................................................................................................................................................................... 3
INTEGRACIÓN CONTINUA ..................................................................................................................................................................... 3
ESCENARIO .................................................................................................................................................................................. 4
NODOS DEL AMBIENTE DE DESARROLLO .................................................................................................................................................. 4
FORMA DE TRABAJO ........................................................................................................................................................................... 5
Pasos ....................................................................................................................................................................................... 5
COMPONENTES POR TAREA DEL AMBIENTE DE DESARROLLO ............................................................................................................................. 6
COMPONENTES POR NODO DEL AMBIENTE DE DESARROLLO .............................................................................................................................. 7
REDUCIR LOS RIESGOS ....................................................................................................................................................................... 8
BUENAS PRÁCTICAS ........................................................................................................................................................................ 10
HERRAMIENTAS .............................................................................................................................................................................. 11
SCM - Escenario de trabajo de SCM ........................................................................................................................................... 11
Patrones de Administración de “Software Configuration Management” ............................................................................................ 12
MAVEN ........................................................................................................................................................................................ 15
Ciclos de vida de un proyecto Maven .......................................................................................................................................... 16
Lifecycle Reference .................................................................................................................................................................. 18
Built-in Lifecycle Bindings ......................................................................................................................................................... 20
CRUISECONTROL ............................................................................................................................................................................ 25
CONFIGURACIÓN ................................................................................................................................................................................ 26
REFERENCIAS ............................................................................................................................................................................. 31
Integración Continua 2
“capacitación y guía para el desarrollo de software”
Definiciones
Build
Un “build” es el producto generado por la realización de las tareas de compilación, prueba, inspección e instalación. Realizar un “build” tiene
como resultado situar el código todo junto en un ambiente donde funciona de una manera cohesiva.
Integración Continua
Estratégicamente hacerlo con cada cambio !!!
¿Por Qué?
Para responder esta pregunta hay que entender cuál es el objetivo principal de un grupo de desarrollo de software y cuáles son los riesgos
para lograrlo.
Integración Continua 3
“capacitación y guía para el desarrollo de software”
Escenario
Nodos del Ambiente de Desarrollo
Integración Continua 4
“capacitación y guía para el desarrollo de software”
Forma de trabajo
Pasos
1. Un desarrollador realiza un commit (cambios) sobre el SCM server mientras el administrador de CI lo consulta por cambios con una
frecuencia determinada.
2. Después del commit el administrador de CI detecta el cambio, toma del repositorio las últimas versiones y ejecuta los scripts que
integran todo el software
3. El administrador de CI informa por mail acerca de los resultados a los miembros del grupo de desarrollo de los resultados del build
4. El administrador continua consultando al repositorio con la frecuencia determinada
Integración Continua 5
“capacitación y guía para el desarrollo de software”
Checkstyle
PMD/CPD
Clover
JavaDoc
Apache Ant 1.7.1
Doxygen
Referencias
JIRA SE 3.13
Compilación y Admin. Repositorio
Centralización de Info
Publicación
Integración Continua 6
“capacitación y guía para el desarrollo de software”
Checkstyle
PMD/CPD
Clover
JavaDoc
Apache Ant 1.7.1
Referencias Doxygen
Serv idores
JIRA SE 3.13
Serv idores y Estaciones de
Trabaj o
Enterprise Architecture 6.1
Estaciones de Trabaj o
Integración Continua 7
“capacitación y guía para el desarrollo de software”
Integración Continua 8
“capacitación y guía para el desarrollo de software”
Integración Continua 9
“capacitación y guía para el desarrollo de software”
Buenas prácticas
cd Prácticas
Haga commit con NO haga commit de código Corrija los errores que
frecuencia que no funciona rompieron el buid
inmediatamente
Escriba tests unitarios TODOS los test y revisiones Ejecute builds privados
automáticos deben ejecutar OK
Integración Continua 10
“capacitación y guía para el desarrollo de software”
Herramientas
SCM - Escenario de trabajo de SCM
Integración Continua 11
“capacitación y guía para el desarrollo de software”
Integración Continua 12
“capacitación y guía para el desarrollo de software”
cd Prácticas
Ejecute comandos simples Separe scripts de build del Centralice todos los
de build IDE componentes del software
en un repositorio
Integración Continua 13
“capacitación y guía para el desarrollo de software”
cd Prácticas
Utilice una copia privada de Utilice el repositorio para Asigne capacidad a los
la DB compartir los componentes DESA para modificar la DB
de la DB
Integración Continua 14
“capacitación y guía para el desarrollo de software”
Maven
cd mav en
Repositories (Local y
Remoto)
Integración Continua 15
“capacitación y guía para el desarrollo de software”
cd mav en2
POM Project
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
Maven
settings.xml
Repositorio local: proxy contra el repositorio público (central) y lugar de instalación de los productos generados en el desarrollo. Cache local
para todo el software que solo UNA VEZ será bajado al local para todos los proyectos de la organización.
SNAPSHOT: dependencias chequeadas por Maven para utilizar la última versión (dependencias que cambian mucho u otros proyectos en
desarrollo)
Integración Continua 16
“capacitación y guía para el desarrollo de software”
cd Mav enLifeCicle
1 - validate
2 - compile
3 - test
4 - package
5 - integration-test
6 - verify
7 - install
8 - deploy
Integración Continua 17
“capacitación y guía para el desarrollo de software”
Lifecycle Reference
The following lists all build phases of the default, clean and site lifecycle, which are executed in the order given up to the point of the one specified.
Clean Lifecycle
Default Lifecycle
validate Validate the project is correct and all necessary information is available.
process-sources Process the source code, for example to filter any values.
process-resources Copy and process the resources into the destination directory, ready for packaging.
process-classes Post-process the generated files from compilation, for example to do bytecode enhancement on Java classes.
Integración Continua 18
“capacitación y guía para el desarrollo de software”
process-test-classes Post-process the generated files from test compilation, for example to do bytecode enhancement on Java classes. For Maven 2.0.5 and
above.
test Run tests using a suitable unit testing framework. These tests should not require the code be packaged or deployed.
prepare-package Perform any operations necessary to prepare a package before the actual packaging. This often results in an unpacked, processed
version of the package. (Maven 2.1 and above)
package Take the compiled code and package it in its distributable format, such as a JAR.
pre-integration-test Perform actions required before integration tests are executed. This may involve things such as setting up the required environment.
integration-test Process and deploy the package if necessary into an environment where integration tests can be run.
post-integration- Perform actions required after integration tests have been executed. This may including cleaning up the environment.
test
verify Run any checks to verify the package is valid and meets quality criteria.
install Install the package into the local repository, for use as a dependency in other projects locally.
deploy Done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and
projects.
Site Lifecycle
pre-site executes processes needed prior to the actual project site generation
post-site executes processes needed to finalize the site generation, and to prepare for site deployment
Integración Continua 19
“capacitación y guía para el desarrollo de software”
site-deploy deploys the generated site documentation to the specified web server
Some phases have goals binded to them by default. And for the default lifecycle, these bindings depend on the packaging value. Here are some of the goal-
to-build-phase bindings.
Default Lifecycle Bindings - Packaging ejb / ejb3 / jar / par / rar / war
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package ejb:ejb or ejb3:ejb3 or jar:jar or par:par or rar:rar or war:war
install install:install
deploy deploy:deploy
Integración Continua 20
“capacitación y guía para el desarrollo de software”
install install:install
deploy deploy:deploy
Integración Continua 21
“capacitación y guía para el desarrollo de software”
cd Prácticas
Categorice los tests Ejecute primero los test Escirba tests para
más rápidos reproducir errores
Integración Continua 22
“capacitación y guía para el desarrollo de software”
cd Prácticas
Controle el cubrimiento de
las pruebas y revisiones
Integración Continua 23
“capacitación y guía para el desarrollo de software”
cd Prácticas
Ejecute TODOS los tests Genere reportes del Genere capacidad para
proceso de build e volver atrás releases
instalación
cd Prácticas
Utilice mecanismos de
Buenas prácticas de trabajo de integración comunicación para generar
continua (integración continua) realimentación
Integración Continua 24
“capacitación y guía para el desarrollo de software”
CruiseControl
Integración Continua 25
“capacitación y guía para el desarrollo de software”
Configuración
<cruisecontrol>
<!—Configuración del Repositorio -->
<property name="svn.repository" value="file:///C:/Users/gpantaleo/trabajo/SVN"/>
<property name="svn.portal.project" value="${svn.repository}/AnalisisValidacion"/>
<!—Configuración específica de compilación -->
<property name="maven.home" value= "c:/Users/gpantaleo/trabajo/Maven/apache-maven-2.0.9"/>
<property name="ant.home" value="C:/ant"/>
<!—Configuraciones específicas del Cruise Control Scheduler -->
<property name="schedule.interval" value="300"/>
<property name="quiet.period" value="30"/>
<plugin name="m2projectCI" classname="net.sourceforge.cruisecontrol.ProjectConfig" buildafterfailed="false">
<log> <!-- This includes all test reports of a maven multimodule project. -->
<merge dir="projects/AnalisisValidacion/trunk/${project.name}" pattern="TEST-*.xml" />
</log>
</plugin>
<!-- Proyecto -->
<m2projectCI name="codigo">
<!-- Plugins -->
<plugin name="svn" classname="net.sourceforge.cruisecontrol.sourcecontrols.SVN"/>
<plugin name="svnbootstrapper" classname="net.sourceforge.cruisecontrol.bootstrappers.SVNBootstrapper"/>
<!—Log de estados del build al file system. -->
<listeners>
<currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
Integración Continua 26
“capacitación y guía para el desarrollo de software”
</listeners>
<!— Observador (boostrap) de cambios en Subversion
<bootstrappers>
<svnbootstrapper LocalWorkingCopy="projects/AnalisisValidacion" />
</bootstrappers>
<!—Conjunto de elementos indicativos de cambio en la instalación de CruiseControl.<modificationset> puede contener múltiple elementos, críticos, los
cuales serán chequeados en lugar de chequear todos los files de un proyecto. -->
<modificationset quietperiod="${quiet.period}">
<svn localWorkingcopy="projects/AnalisisValidacion" repositoryLocation="${svn.portal.project}" useLocalRevision="true"/>
<maven2snapshotdependency pomfile="projects/AnalisisValidacion/trunk/codigo/pom.xml"/>
<!—cualquier cbio. en estos files dispararán un build -->
<filesystem folder="projects/AnalisisValidacion/trunk/codigo/src"/>
<buildstatus logdir="logs/codigo" />
</modificationset>
<!—Acciones principales: 1) se copian los cambios del repositorio a los directorios locales del proyecto, 2) se invoca a Maven para realizar el build -->
<schedule interval="${schedule.interval}">
<composite>
<ant anthome="${ant.home}" buildfile="projects/AnalisisValidacion/svn-build.xml"/>
<maven2 mvnhome="${maven.home}" pomfile="projects/AnalisisValidacion/trunk/codigo/pom.xml" goal="clean | deploy | site:site site:deploy" />
<maven2 mvnhome="${maven.home}" pomfile="projects/AnalisisValidacion/trunk/codigo/pom.xml"
goal="clover2:instrument clover2:aggregate clover2:clover"/>
</composite>
</schedule>
</m2projectCI>
</cruisecontrol>
Integración Continua 27
“capacitación y guía para el desarrollo de software”
Integración Continua 28
“capacitación y guía para el desarrollo de software”
Integración Continua 29
“capacitación y guía para el desarrollo de software”
Integración Continua 30
“capacitación y guía para el desarrollo de software”
Referencias
Continuous Integration: Improving Software Quality and Reducing Risk, Paul M. Duvall with Andrew Glover
and Steve Matyas, 2008.
xUnit Test Patterns: Refactoring Test Code, Gerard Meszaros, Addison-Wesley, 2007.
Software Configuration Management Patterns: Effective Teamwork, Practical Integration (Software Patterns
Series),
Stephen P. Berczuk (Author), et al, 2008.
Integración Continua 31