¿Cómo usar las versiones de integración de hiedra contra versiones antiguas de código?

Mi organización está estudiando el uso de Apache Ivy para la administración de dependencies en una configuration de múltiples proyectos. Tenemos un proyecto principal (llámalo PRINCIPAL) donde se lleva a cabo la mayor parte del desarrollo y unos pocos proyectos de biblioteca de ayuda (llámalo LIBPROJ) que guardamos en depósitos separados. Lo que hacemos ahora es build recipientes para los proyectos de la biblioteca cuando cambian, y comprometerlos con el proyecto principal, pero esto es un gran dolor de cabeza y lleva a la saturación del proyecto.

Parece que usar algo como hiedra es una buena opción. Tenemos previsto utilizar nuestro server de Jenkins para crear automáticamente un nuevo contenedor de biblioteca para LIBPROJ y publicarlo en ivy, y luego usar una versión "latest.integration" para incorporar automáticamente la versión más reciente de LIBPROJ en MAIN. Pero si tenemos que dividirnos para descubrir cuándo surgió un problema, ¿cómo puede funcionar esto?

La única forma en que puedo pensar para hacer esto ahora mismo es cambiar la versión de LIBPROJ de la que dependemos en PRINCIPAL cada vez que se realiza un cambio en LIBPROJ, pero eso no es mucho mejor que registrar el propio contenedor.

La razón por la que estoy preocupado es porque en el caso de mirar versiones antiguas de MAIN, si solo marque una, no será posible comstackrla y ejecutarla porque está solicitando la última compilation, incluso aunque la revisión I ' Estoy mirando en este momento podría estar días / semanas / meses fuera de synchronization. Esto romperá cualquier tipo de herramientas de bisección (como en git o mercurial), que es algo que realmente no quiero hacer.

El uso de revisiones dinámicas es una característica normal y poderosa de la hiedra. Obviamente, debe tener cuidado porque las dependencies de las comstackciones nuevas pueden fallar cuando los proyectos de terceros introducen cambios incompatibles.

Mis recomendaciones sobre el uso:

  • latest.release : para modules producidos por la misma empresa (o empresas queueboradoras).
  • latest.integration : para modules producidos por otros equipos dentro del mismo proyecto

El punto aquí es gestionar el cambio. Las revisiones dinámicas solo se usan para dependencies internas y solo los equipos queueboradores de cierre pueden reactjsr lo suficientemente rápido como para generar fallas introducidas por las comstackciones de desarrollo.

Para las dependencies de código abierto de terceros, recomiendo configurar la versión explícita y revisarla periódicamente para la actualización.

Finalmente, si tiene dudas sobre cómo reproducir comstackciones antiguas, una solución disponible es enviar una copy del ivy.xml resuelto al cortar el lanzamiento. La tarea de entrega de hiedra puede hacer esto.

<ivy:deliver deliverpattern="ivy-resolved.xml" pubrevision="${version}" status="release"/> 

Y no olvide que si publica un module en su repository de hiedra, también estará allí una copy del file de hiedra resuelta.

Debido a su última observación, no debería estar utilizando latest.integration. En mi humilde opinión, el último concepto es particularmente útil entre los proyectos en los mismos repositorys, donde espera clonarlos / pagarlos juntos.

Estoy usando la dependencia de los numbers de versión en un caso similar al tuyo. Sin embargo, podría actualizar el número de versión automáticamente.

podrías crear un script que (no mi favorito):

1) construye las bibliotecas de LIBPROJ

2) luego revisa el principal y modifica sus versiones de dependencia.

Sin embargo, no lo alenté cuando presenté IVY a mis colegas. Cuando desee una nueva versión de LIBPROJ, créela y empújela con un lanzamiento claro.

Luego, cambie el file de dependencia en su MAIN.

1) No se hinchará de binarys.

2) crea sentido de seguimiento para qué versión se está utilizando ahora.

3) Versiones.