¿Qué ventajas ofrecen las herramientas de integración continua en un proyecto en solitario?

18

Si está haciendo un proyecto en solitario, ¿usaría las herramientas de CI para construir desde un repositorio? He usado Hudson y Cruise Control en un entorno de equipo, donde es esencial construir tan pronto como alguien registra algo.

Creo que el valor del control de versiones sigue siendo obvio, pero ¿necesito construir después de cada confirmación, ya que simplemente habría construido en mi máquina local y nadie más se está comprometiendo?

iftheshoefritz
fuente

Respuestas:

12

Bueno, estoy planeando usar una herramienta de integración continua en un proyecto y soy el desarrollador único. La necesidad viene porque

  1. Un objetivo es hacerlo multiplataforma, y ​​tener una herramienta de integración lo ayuda a verificar implícitamente (básico) su aplicación en varias plataformas una vez que haya empujado sus cambios en el repositorio de integración (o en el central, o lo que sea que sea será utilizado como autorizado).
  2. El proyecto está construido a largo plazo, por lo que tendré que trabajar con un equipo más adelante. No planeo reclutar a nadie hasta 2012, por lo que la integración continua puede esperar el momento, hasta que 1. se convierta en la prioridad.

Aparte de la preparación multiplataforma y de trabajo en equipo, no veo la necesidad. Lo principal es tener algún tipo de software de control de fuente y tener varios repositorios para mantener las copias de seguridad. Eso lo ayudará a configurar herramientas de construcción a su alrededor cuando sea necesario.

Sobre el tiempo de construcción, estoy usando Mercurial y configuro un repositorio de integración que no es el repositorio de trabajo en equipo. Entonces, empuje los cambios en el repositorio de trabajo en equipo hasta que sienta que es hora de hacer que el sistema de integración intente construir. Luego paso del repositorio de trabajo en equipo al repositorio de integración y eso activará la compilación. Luego también agrego un script que extraerá el repositorio de trabajo en equipo en el repositorio de integración una vez al día.

Aquí estoy asumiendo que trabajo casi todos los días en mi proyecto, pero no siempre es cierto. Debe establecer un tiempo de compilación que sea relativo a la frecuencia con la que necesita compilaciones. En una compañía de juegos en la que trabajé antes, usamos CruiseControle y construía una versión completa cada hora. También podríamos forzar una construcción cuando quisiéramos si fuera necesario.

Para un proyecto en el hogar, una vez al día podría ser "a menudo". El requisito principal sería permitir fácilmente al usuario forzar el lanzamiento de una compilación.

Klaim
fuente
20

Después de una breve contemplación, sugeriría que incluso podría ser más importante para un desarrollador en solitario que para un equipo.

En el nivel más básico, un servidor de CI demuestra que puede construir su aplicación desde cero desde una fuente comprometida; combinada con un conjunto decente de pruebas, debería demostrar que puede construir y ejecutar desde cero.

Dado que una de las cosas que intento hacer es asegurarme de que mi compilación incluya un paquete desplegable, también sabe que puede obtener algo para implementar (limpio y desde un estado / versión conocido).

De hecho, ahora, cuando haga File | New Project, probablemente debería incluir crear o agregar a su repositorio y configurar su script de compilación de CI y la configuración de implementación (incluso si eso es solo para comprimir un montón de cosas para la implementación de xcopy)


Anexo (2016): hoy en día mi sistema de CI también será una parte integral de mi proceso de implementación, por lo que su valor ha aumentado y no ejecutaré ningún proyecto entregable sin él. La implementación automatizada de botones elimina mucho estrés del proceso y, de alguna manera, dar forma o formar un servidor de compilación es parte integral de eso.

Murph
fuente
10
+1 como desarrollador en solitario, está más en riesgo de problemas de 'funciona en mi máquina'
jk.
Los votos negativos sin razón no son útiles: ¿qué tiene de malo lo anterior?
Murph
+1, me enfrento a una situación muy similar aquí: muchos proyectos que son lo suficientemente pequeños como para ser mantenidos por un solo desarrollador y un gran proyecto mantenido por un equipo. Para los proyectos pequeños, a menudo enfrentamos el problema de que alguien se olvide de registrar un archivo de código fuente en particular. Para el gran proyecto, esto nunca se ha convertido en un problema, ya que si uno del equipo se olvida de agregar un nuevo archivo al control de origen, los demás se quejarán de inmediato. Debo agregar que vamos a instalar un servidor CI el próximo mes, ¡comenzando con los pequeños proyectos!
Doc Brown
7

Cuando soy el único que se compromete, solo construyo y pruebo antes de comprometerme realmente. Usualmente uso un objetivo makefile como:

make sense

Eso configura, construye, ejecuta todas las pruebas (consciente de valgrind), ejecuta pelusas, etc. Como sé que seré el único que empuja, realmente no necesito el poder de algo como Hudson.

Además, en un entorno en el que hay varias ramas que alimentan un repositorio principal, si todos siguen el tirón siempre antes de comprometerse o presionar, el servidor de CI podría estar un poco exagerado. Una regla bien escrita de que el autor de lo que rompió la última compilación compra pizza el viernes generalmente mantiene las cosas funcionando sin problemas :)

Si llega a una situación en la que un proyecto está claramente dividido en subsistemas que tienen sus propios líderes, realmente debe contemplar el uso de algo como Hudson. Alguien puede realizar pruebas locales, perder una carrera con otro subsistema y terminar empujando algo tóxico.

Además, si está manteniendo una bifurcación de un proyecto de rápido movimiento (por ejemplo, su propio conjunto de parches para el kernel de Linux), debería considerar usar algo como Hudson, aunque esté 'solo' en ese proyecto. Esto es especialmente cierto si se bifurca / re-basa directamente desde la línea principal.

Tim Post
fuente
11
Asegúrese de recordar codificar su objetivo 'sensato', de lo contrario podría obtenerlo make: don't know how to make sense. Stop. Argh!
Alan Pearce
@Alan - Fueron y echaron a perder toda nuestra diversión en versiones posteriores (al menos GNU make) ... ahora solo obtienes "make: *** Ninguna regla para que el objetivo tenga" sentido ". Detente".
Tim Post
1
Sugiero que cambie a FreeBSD entonces. :)
Alan Pearce
1

No diría que esto es solo una buena ventaja, diría que es vital para la ingeniería de software de alta calidad para nosotros, los artistas en solitario. La mayoría de nosotros dejaremos que sus estándares de calidad se desvanezcan un poco si tienen prisa si piensan que es bastante fácil de arreglar más tarde. Si confirma software en ese estado, esencialmente tiene una base de código inútil almacenada en su control de origen.

Si se cumple correctamente (es decir, no se saltea las pruebas y se asegura de que se desarrolle cada vez que se compromete), CI lo obliga a cumplir con un estándar de calidad más alto de lo que lo haría si lo hiciera de todos modos.

En ningún
fuente
Logré ejecutar una aplicación de base de datos interna exitosa sin ninguna sobrecarga de un servidor CI. Se necesita un poco de disciplina en algunas áreas, pero menos que la sobrecarga de configurar todo eso.
wobbily_col
0

Es importante si desea reducir su tiempo de espera para ver si todo sigue yendo bien. Aunque puede hacer que su IDE compile cosas para usted tan pronto como guarde, no ejecuta automáticamente pruebas unitarias, por lo que mi servidor de CI ejecuta las pruebas unitarias y los informes de cobertura de casos de prueba y otros análisis de calidad de mi código tan pronto Lo empujo

El único desencadenante que tengo que hacer es empujar mis cambios actuales al control de versiones y puedo volver a la codificación. Y mientras estoy pensando en la codificación, el sistema de CI está ocupado haciendo los largos informes de calidad que miraré de vez en cuando cuando mi cerebro se detenga.

Tengo una máquina VMWare separada en la misma computadora portátil que hace las compilaciones para el código que introduzco. Para hacer esto, solo obtengo una imagen de Linux VMWare llave en mano e instalo jenkins usando apt-get y hago algunos cambios menores de configuración.

Arquímedes Trajano
fuente