Integración continua: ¿generar depuración y lanzamiento cada vez?

8

¿Es una práctica estándar al configurar un servidor de integración continua para construir una versión de depuración y lanzamiento de cada proyecto? La mayoría de las veces los desarrolladores codifican con un conjunto de configuración de proyecto en modo de depuración habilitado y podría haber diferentes configuraciones de ruta de biblioteca, definiciones del compilador u otros elementos configurados de manera diferente entre Debug / Release que los haría actuar de manera diferente.

Configuré mi servidor CI para compilar Debug & Release de cada proyecto y me pregunto si lo estoy pensando demasiado. Mi suposición es que haré esto siempre que pueda obtener comentarios rápidos y una vez que eso suceda, luego empuje el Release a una compilación nocturna tal vez. ¿Hay una forma "estándar" de abordar esto?

Darian Miller
fuente
programmers.stackexchange.com/questions/55946/… es una pregunta similar que vale la pena revisar esas respuestas.
JB King el
3
En todo caso, iría por el otro lado, si desea eliminar uno, entonces debe construir la versión de lanzamiento cada vez que no la versión de depuración, ya que esa es la versión más probable que se rompa ...
Murph
Supongo que Release build es el único para construir. La pregunta es también construir la depuración.
Darian Miller el

Respuestas:

9

Construir ambas configuraciones no afectará, pero si tiene que elegir (especialmente debido a las limitaciones de tiempo de construcción), cree la configuración de lanzamiento.

En última instancia, desea compilar, probar, empaquetar e implementar la configuración que usarán sus clientes y encontrar cualquier problema antes de que lo hagan.

Bernardo
fuente
8

Solo lanzamiento.

Suponga que los desarrolladores están haciendo compilaciones de depuración de todos modos y que los peores errores son los de 'funciona en depuración'. ¡Cuanto más rápido pueda detectarlos y reducir los cambios que pueden haberlos causado, más felices estarán todos!

Martin Beckett
fuente
Si solo tiene un componente, sí. Si tiene varios componentes, existe el riesgo de que nadie pruebe un componente en particular durante algún tiempo y se rompa, por lo que necesita al menos una compilación nocturna de todo en todas las configuraciones.
Jan Hudec
1
@ JanHudec: ¿cuál es el valor de una prueba de una compilación de depuración? Si la versión funciona pero la depuración no, ¿es eso un error o solo una consecuencia de la depuración?
Martin Beckett
@ MartinBeckett: Es una gran molestia para la próxima persona que necesitará depurar un problema real en la versión de depuración. Especialmente cuando eso es pocas semanas después, lo cual es bastante posible si tienes múltiples componentes.
Jan Hudec
4

Recomiendo encarecidamente construir y probar ambos si se puede hacer en una noche.

  • puedes detectar algunos heisenbugs
  • te aseguras de que tu cliente obtendrá el comportamiento que has probado y validado
Simon Bergot
fuente
1

Debería crear todo para lo cual existe la posibilidad de que nadie lo intente durante algún tiempo. Lo que significa que si solo tiene un objetivo de compilación, no necesita depurar en una integración continua, porque los desarrolladores lo notarán rápidamente. Pero la mayoría de las veces hay múltiples componentes y los componentes en los que no se está trabajando actualmente no serán construidos por los desarrolladores, pero aún pueden romperse por cambios en el código común. En tales casos, debe compilar todas las configuraciones para que no encuentre la compilación rota cuando necesite tocar dichos componentes.

Ahora, a menudo, construir todo en cada configuración lleva mucho tiempo, por lo que no se puede construir todo después de cada confirmación. En tal caso, realice las configuraciones de lanzamiento de los componentes más importantes cada vez y agregue una compilación nocturna de todo.

Actualmente trabajo en el proyecto, donde tenemos una compilación continua, que sondea el control de versiones cada 10 minutos y, aunque solo se trata de configuraciones seleccionadas, puede demorar más de 1 hora después de las confirmaciones más grandes. De lo que tenemos una compilación nocturna, que compila todos los componentes en todas las configuraciones y siempre hace una compilación limpia, que demora aproximadamente 5 horas. Y tenemos una compilación semanal, que genera lanzamientos en todas las variantes personalizadas y eso lleva más de un día entero.

Jan Hudec
fuente
0

Depende de tu proyecto. En mi proyecto actual, solo compilamos depuración (y ejecutamos pruebas unitarias) en cada confirmación mientras realizamos la versión de lanzamiento como parte de la "compilación de implementación".

En la última compañía en la que trabajé, tuvimos algunos problemas con la versión de lanzamiento que funcionaba de manera un poco diferente, por lo que creamos depuración y lanzamiento en cada confirmación y ejecutamos pruebas unitarias en ambos.

Dror Helper
fuente
44
y cuando te das cuenta de que el lanzamiento está roto justo antes de la implementación, tienes dos horas para resolver la situación
Simon Bergot