integración continua
TRANSCRIPT
-
Integracin Continua
La integracin continua es una prctica de desarrollo de software en la cual los miembros de un equipo integran
su trabajo con mucha frecuencia. Cada integracin es verificada por un build automatizado para detectar
errores de integracin lo ms rpido posible.
Una historia comn entre los proyectos de software es que la integracin es un proceso largo e impredecible.
Sin embargo, muchos proyectos tratan a la integracin como algo completamente convencional. El trabajo
individual de un desarrollador est solamente a un par de horas de un proyecto compartido, y puede ser
reintegrado al estado anterior en cuestin de minutos. Cualquier error de integracin es encontrado
rpidamente y puede ser arreglado rpidamente.
Este contraste no es el resultado de una herramienta cara y compleja. La esencia de ello recae simplemente en
llevar a la prctica la integracin frecuente, usualmente diaria, junto con un repositorio controlado de cdigo
fuente.
A pesar de que la Integracin Continua es una prctica que no requiere ninguna herramienta en particular para
desplegarse, hemos descubierto que es til utilizar un servidor de Integracin Contnua, como CruiseControl.
Construyendo una Caracterstica Con Integracin Contnua
Se comienza obteniendo en la mquina donde estoy desarrollando, una copia del cdigo integrado sobre el que
se est trabajando. Esto se lleva a cabo utilizando un sistema de administracin del cdigo fuente. Un sistema
de control del cdigo fuente almacena todo el cdigo de un proyecto en un repositorio. Para referirnos al
estado actual del sistema, utilizamos el trmino mainline. En cualquier momento, un desarrollador puede
hacer una copia controlada del mailine en su computadora, esto es llamado checking out (comprobacin). La
copia almacenada en la computadora del desarrollador se llama working copy (copia en progreso). Se toma la
working copy y se hace lo que se necesite para completar la tarea. Una vez que se hace esto, se realiza un
montaje automatizado en la computadora donde se est desarrollando. Esto toma el cdigo fuente en la
working copy, lo compila y linkea en un ejecutable, y corre las pruebas automatizadas. Se considera que el
montaje es bueno si todos los montajes y las pruebas resultan sin errores.
Con un buen montaje, se puede pensar en enviar los cambios al repositorio. Lo interesante es que otra gente
debe haber hecho cambios al mainline antes de que se hubiera enviado el cambio al repositorio. Por lo tanto
primero se debe actualizar la working copy con los nuevos cambios y volver a hacer el montaje. Si los cambios
entran en conflicto, se manifestar una falla, o en la compilacin o en las pruebas. En este caso, es
responsabilidad del desarrollador arreglar esto y repetirlo hasta que se pueda montar una working copy que
est sincronizada de manera adecuada con el mainline.
Una vez que se haya sincronizado adecuadamente la working copy, se pueden enviar los cambios al mainline, y
actualizar el repositorio. Sin embargo, el trabajo no termina all. En ese punto, se vuelve a montar, pero esta
vez con una mquina de integracin basada en el cdigo del mainline. Slo se puede afirmar que los cambios
sern aceptados y permanentes cuando este nuevo montaje sea exitoso.
Si ocurre un conflicto entre dos desarrolladores, generalmente es notado cuando el segundo desarrollador
monta su working copy. La tarea ms importante es arreglarlo y hacer que funcione apropiadamente. Las fallas
de integracin no deben permanecer por demasiado tiempo.
El resultado es una porcin estable de software que trabaja apropiadamente y contiene pocos bugs.
-
Prcticas de Integracin Contnua
Mantenga un nico repositorio de cdigo: Con el correr de los aos, los equipos de desarrollo de
software han creado herramientas para manejar los archivos necesarios para crear un proyecto. Estas
herramientas son una parte importantsima de muchos proyectos de desarrollo, por lo tanto es
conveniente asegurarse de que se tiene un sistema de administracin de cdigo fuente decente. El
costo no es un problema, ya que hay buenas herramientas open source.
Una vez que se tiene un sistema de administracin de cdigo fuente, asegrese de que sea un lugar
conocido por todos los miembros del equipo para poder acceder al cdigo.
All se debe alojar todo lo necesario para un montaje, pero no algo que se monte.
Una de las caractersticas del sistema de control de versiones es que permite que se creen mltiples
ramas, para poder manejar diferentes corrientes de desarrollo. Sin embargo, a pesar de ser til, muy
frecuentemente se sobreutiliza. Lo conveniente es minimizar el uso de ramificaciones, e intentar tener
una nica rama: el mainline.
Automatice el montaje: Los entornos automatizados para montaje son una caracterstica comn de los
sistemas. Asegrese de que puede montar y lanzar su sistema utilizando estos scripts utilizando un
nico comando.
Un error comn es no incluir todo en el montaje automtico.
En sntesis: Cualquiera debera poder traer una computadora virgen, sacar el cdigo del repositorio, y
con un solo comando hacer correr el sistema en su mquina.
Haga que su montaje se auto testee: Una buena manera de encontrar bugs de manera ms rpida y
eficiente es incluyendo pruebas automatizadas en el proceso de montaje. Para auto-testear el cdigo
se necesita un conjunto de pruebas automatizadas que pueden comprobar una gran parte del cdigo
buscando bugs.
Obviamente, no se puede contar con que los tests encontrarn todo, pues como ya se ha dicho antes,
los tests no prueban la ausencia de bugs.
Todos deben enviar al mainline todos los das: La integracin permite que los desarrolladores se
mantengan informados acerca de los cambios que realizan. El nico prerrequisito para que un
desarrollador pueda enviar al mainline es que pueda montar su cdigo correctamente.
Al hacer esto con frecuencia, los desarrolladores encuentran rpidamente si existe un conflicto entre
dos desarrollos. La clave para arreglar los problemas es encontrarlos con rapidez. El hecho de que se
monte cuando se actualiza la working copy significa que se detectan conflictos de compilacin o
textuales. Dado que el montaje se autotestea, tambin se detectan conflictos en el funcionamiento del
cdigo.
Como regla general: Todo desarrollador debera enviar al repositorio todos los das.
Cada envo debe montar el mainline en una mquina integradora: Debera asegurarse de que los
montajes regulares se realicen en una mquina integradora, y el envo debe considerarse eficaz slo si
este montaje de integracin es exitoso. Un corolario de esto es que no debera irse a su casa hasta que
el montaje del mainline haya pasado correctamente con cualquier envo que haya agregado en el da.
Hay dos maneras de asegurar esto:
o Utilizar un montaje manual: es similar al montaje local que un desarrollador hace antes de
enviar al repositorio. El desarrollador va a la mquina integradora, comprueba el mainline y
corre el montaje de integracin. Vigila el progreso y si el montaje es exitoso, el envo est
terminado.
-
o Un servidor de integracin contnua: Acta como un monitor del repositorio. Cada vez que un
envo llega al servidor, automticamente comprueba lo necesario. El envo no se considera
terminado hasta que el desarrollador recibe una notificacin satisfactoria.
Haga que el montaje sea rpido: El punto mas importante de la Integracin Contnua es proveer una
respuesta rpida.
Testee en un clon del entorno de produccin: El punto de testear es detectar, en condiciones
controladas, cualquier problema que el sistema pueda tener en produccin. Una parte significativa de
esto es el entorno en el cual corre el sistema de produccin. Si se prueba en un entorno diferente, cada
diferencia en el resultado pasar bajo prueba, y no en produccin.
Haga que sea sencillo para todos conseguir el ltimo ejecutable: Una de las partes ms difciles del
desarrollo de software es asegurarse de que se est desarrollando el software correcto. Para hacer que
esto funcione, cualquiera involucrado con un proyecto de software debera poder conseguir la ltima
versin y correrla.
En sntesis: Asegrese de que hay un lugar conocido por todos en donde se puede encontrar el ltimo
ejecutable.
Todos pueden ver lo que est sucediendo: La Integracin Contnua se basa en la comunicacin, de
modo que se quiere asegurar que todos puedan ver el estado del sistema y los cambios que se le han
estado haciendo. Una de las cosas ms importantes para comunicar es el estado del montaje del
mainline.
Automatice el despliegue: Para realizar integracin contnua se requieren mltiples entornos, uno para
correr pruebas, otro o ms para realizar pruebas secundarias. Es importante tener scripts que permitan
desplegar la aplicacin en cualquier entorno con facilidad.
Una caracterstica que debe considerarse es la vuelta atrs automtica, es decir, en caso de que se
produzca un error, tener la posibilidad de volver a un estado anterior satisfactorio.
Beneficios de la Integracin Contnua
El mayor beneficio de la Integracin Contnua es la reduccin del riesgo. La integracin continua permite
acortar los tiempos de integracin, y se elimina la incerteza de saber cunto tiempo se tardar, o si se est
yendo en la direccin correcta. Todo el tiempo se sabe dnde se est, qu trabaja y qu no, y los bugs ms
importantes en el sistema. Si bien la integracin continua no se deshace de los bugs, al menos hace que sean
muchsimo ms sencillos de encontrar y eliminar. Como resultado, los proyectos con integracin continua
tienden a tener muchos menos bugs, tanto en produccin como en proceso. De todos modos, esto tambin
tiene que ver con qu tan buenos sean los paquetes de pruebas.
Primeros pasos en Integracin Continua
Automatice el montaje
Agregue pruebas automatizadas al montaje
Intente agilizar el envo
Si est comenzando un nuevo proyecto, comience con Integracin Continua desde el principio
Consiga ayuda de alguien que ya haya hecho Integracin Continua antes.