Promover varios modules (integración -> hito) en hiedra

Ivy es ideal para administrar dependencies, pero no está diseñado para manejar todo el ciclo de vida del software en muchos modules. Dicho esto, tiene varias características que parecen respaldarlo (como el status y los attributes de la branch ), y el guión de mejores prácticas de hiedra alude a la posibilidad de promover revisiones de integración a un hito o lanzamiento, "con algo de trabajo".

Desafortunadamente, no he encontrado una guía definitiva sobre cómo administrar el ciclo dev -> testing -> deployment. Aquí hay algunas cosas que quiero lograr:

(Dado que los desarrolladores suelen trabajar en muchos modules en un espacio de trabajo local)

  1. Dev puede publicar cambios en un module de forma local, para que otros modules en el espacio de trabajo puedan get los artefactos actualizados.
  2. Dev puede designar una versión como "list para implementar para probar" con un command.
  3. Tester puede designar una versión como "list para prod" con un command.
  4. Dev puede rebuild cualquier versión desde el origen y las dependencies apropiadas se recogen correctamente (también conocidas como comstackciones repetibles).

Algunas cosas de las que soy bastante claro son:

  • El status revisión debe usarse para indicar si esa revisión es solo para desarrollo, si está list para testings o si está list para producción.
  • El atributo de branch debe ser suficiente para manejar diferentes twigs de proyecto

Esto es lo que estoy luchando:

Cómo promover construcciones de integración

Digamos que he revisado estos modules en mi espacio de trabajo:

Tabla de dependencia del módulo

Ahora estoy contento con el module a, y decido publicar un hito utilizando las versiones desprotegidas en mi espacio de trabajo. Lo que debe suceder en el repository es:

  • e-1.0-RC1 se publica
  • d-1.1-RC2 se publica, haciendo reference a e-1.0-RC1 como una dependencia
  • c-2.0-RC1 se publica, haciendo reference a d-1.1-RC2 como una dependencia
  • b-3.3-RC1 se publica, haciendo reference a e-1.0-RC1 como una dependencia
  • Finalmente, se publica a a-7.1-RC2 , haciendo reference a c-2.0-RC1 y b-3.3-RC1 como dependencies.

Si trato de hacer mi propio esfuerzo para esto, probablemente terminaré haciendo algo de gestión del espacio de trabajo, encontrar y replace ivy.xml, etc. Antes de abrir esa lata de gusanos, me gustaría get algunas opiniones. ¿Cuál es la mejor manera de abordar esto?

Puede usar la entrega recursiva para publicar modules y sus dependencies con un estado superior.

Usando tu ejemplo:

  • e-1.0-RC1 se publica con un estado de integration
  • d-1.1-RC2 se publica con un estado de integration , haciendo reference a e-1.0-RC1 como una dependencia
  • c-2.0-RC1 se publica con un estado de integration , haciendo reference a d-1.1-RC2 como una dependencia
  • b-3.3-RC1 se publica con un estado de integration , haciendo reference a e-1.0-RC1 como una dependencia
  • a-7.1-RC2 se publica con un estado de integration , haciendo reference a c-2.0-RC1 y b-3.3-RC1 como dependencies.
  • Finalmente, decide promover a-7.1-RC2 a un estado de milestone , por lo que realiza una entrega recusiva ( use el atributo delivertarget ). Esto llamará recurrentemente al delivertarget para cada dependencia que tenga un estado inferior a milestone y lo publicará con un estado de milestone .

Lo bueno de esto es que no necesita (ni desea) que cada proyecto se desprotege en su espacio de trabajo, solo a . Esto también significa que es mucho más fácil crear una canalización de implementación y tener su server de CI:

  • ejecutar testings unitarias para a ,
  • build a ,
  • publicar a integration como,
  • implementar a entorno de Prueba del sistema,
  • ejecutar algunas testings del sistema
  • promover a integration de milestone (que promueve sus dependencies)
  • implementar a entorno de testing de aceptación,
  • ejecutar algunas testings de aceptación
  • promocionar a milestone para release (que promueve sus dependencies)
  • implementar a en producción (o uploadlo a un sitio de descarga)

La canalización no necesita acceder en ningún momento a los proyectos dependientes y, dado que la entrega recursiva es genérica, cuando agrega o elimina dependencies (a través de sus files ivy.xml), no necesita cambiar nada en su canalización.

Marqué esta respuesta como una wiki de la comunidad. ¿A alguien más le importa expandir o corregir cualquier cosa que obtuve mal?

¿Cómo haces la fila ?:

  • promocionar un hito para lanzar (que promueve sus dependencies)

Estaba planeando hacer una recuperación y publicar. ¿Hay una mejor manera?