Flujo de trabajo de continuous integration con Jenkins, Gerrit y Submodules

Supongamos que tenemos un proyecto de C ++ que consiste en una biblioteca y un ejecutable. Me gustaría mantener cada uno en su propio repository git para que la biblioteca pueda ser utilizada por otros proyectos. He estado investigando un flujo de trabajo razonable para usar gerrit con los submodules de git.

Leí acerca de la capacidad de gerrit de tener un superproyecto suscrito a los cambios en un submodule , por lo que estaba planeando utilizar esta function para que la twig principal en el superproyecto incluya automáticamente los últimos cambios enviados en la twig principal en el submodule. Esto proporciona un historial de la comisión de submodules asociada a una confirmación de superproyecto, que es la razón por la que estoy considerando submodules en lugar de repository.

Una vez que el superproyecto está suscrito a los cambios en el submodule, parece que el mejor flujo de trabajo sería que los desarrolladores no actualicen la reference del submodule en los cambios enviados a gerrit, sino que dependan de la suscripción para actualizar la reference del submodule en el superproyecto. Pero esto significa que las testings de precompra de continuous integration no tienen idea de que se requiere el cambio de submodule, por lo que cualquier cambio con una dependencia en el submodule no se puede verificar hasta que se envíe el cambio en el submodule.

Si los desarrolladores actualizan la reference de submodule en sus cambios de superproyecto, la continuous integration funciona bien, pero existen otros problemas:

  1. He configurado gerrit para usar un tipo de envío de Cherry-pick porque me gusta que los enlaces " Reviewed-on: vuelvan a los cambios en gerrit en los posts de confirmación. Esto nos permite hacer un análisis de errores post mortem al observar cada set de parches en un cambio de gerrit. Sin embargo, esto crea una confirmación diferente al enviar, por lo que la confirmación especificada en la reference de submodule del cambio del superproyecto es solo un set de parches, no el cambio enviado.
  2. Resulta difícil gestionar los conflictos de combinación si se están revisando al mismo time varios cambios que tienen una dependencia de submodule, ya que solo se puede enviar el primer cambio y los cambios subsiguientes generarán un conflicto debido a que la base del submodule ha cambiado.

¿Alguien tiene una sugerencia para mejorar este flujo de trabajo mediante la eliminación de algunos de los puntos de dolor anteriores?