5

¿De qué manera el desarrollo/ramificación paralelos en su VCS afecta la configuración de su repositorio de artefactos de construcción y las liberaciones al control de calidad?Ramales de desarrollo paralelo, depósitos de artefactos de compilación y versiones de control de calidad

En nuestra empresa delegamos nuestro VCS para esfuerzos de desarrollo paralelo y, a menudo, no tenemos mucho aviso de qué filial enviará en qué orden.

Para la numeración de la versión, me gustaría colocar un identificador de rama para mostrar el control de calidad de la ramificación de la construcción. Cualquier construye a partir del tronco tendría un número 'normal' versión sin identificador de rama en ella:

trunk: 1.1.0 
branch: 1.1.0.MyBranch 
branch: 1.1.0.AnotherBranch 

Originalmente pensado para tener un artefacto depósito de acumulación por sucursal, y un repositorio principal para el tronco.

Pero si mi número de versión incluye la rama, entonces el número de versión será incorrecto para el producto (si estoy compilando y soltando desde la rama).

¿Es la forma de evitar esto solo desde el maletero?

Además, ¿en qué punto debo comenzar a enviar las compilaciones del equipo de QA desde el troncal en lugar de construir desde la sucursal?

Mi idea actual es convencer a la administración de que asigne un equipo de desarrollo a una orden de lanzamiento (digamos una semana de la versión) y combine su rama con la troncal. Entonces QA comienza a obtener compilaciones de troncales en lugar de compilaciones de ramificaciones, y el equipo de desarrollo cuya rama ha sido fusionada corrige cualquier error directamente en el tronco y no en la ramificación.

* ACTUALIZACIÓN *

Más específicamente, estoy usando SVN para VCS, y Artifactory para mi repositorio. Estoy usando Ivy para la gestión de la dependencia.

En cuanto a la ayuda Artifactory el repositorio Presentaciones (Repository Layouts):

"a sequence of literals that identifies the base revision part of the artifact 
version, excluding any integration information" 
"'1.5.10', or in case of an integration revision '1.2-SNAPSHOT' the base revision 
    is '1.2'" 

Esto y los diseños predeterminados para Maven e Ivy sugieren a mí que esto es más común:

MyRepo 
MyLib 
    1.1.0 (this is the dll from trunk) 
    -MyLib.dll 
    1.1.0.MyBranch-SNAPSHOT (dev builds from the "MyBranch" branch) 
    -MyLib.dll 
    1.1.0.AnotherBranch-SNAPSHOT (dev builds from the "AnotherBranch" branch) 
    -MyLib.dll 

¿Este el diseño típico de repo para usar Ivy? ¿Asumiría que esto requeriría usar la función de rama de Ivy para resolver las dependencias en el momento de compilación a la carpeta de la rama correcta en el repositorio?

* ACTUALIZACIÓN 2 *

Aquí está mi estructura Artifactory actual:

MySnapshotRepo 
CompanyName 
    CompanyName.MyLib 
    1.0-SNAPSHOT 
    MyLib.dll (snapshot builds from the dev branch) 
MyReleaseRepo 
CompanyName 
    CompanyName.MyLib 
    1.0.0 
    MyLib.dll (release builds from the trunk) 
    1.0.1 
    MyLib.dll (release builds from the trunk) 
    1.0.2 
    MyLib.dll (release builds from the trunk) 
  1. ¿Cómo punto de la hiedra en una cesión temporal específica en tiempo de compilación? Para un lanzamiento, necesito solo sacar los binarios del repositorio de lanzamiento. Para una compilación de instantáneas, puedo extraer los archivos binarios si aparecen en el repositorio de instantáneas; si faltan, puedo sacarlos del repositorio de versiones. Entiendo cómo encadenar repositorios, simplemente no entiendo cómo cambiarlos.

En mi IvySettings.archivo xml que tengo:

<settings defaultResolver="defaultresolvechain"/> 

..pero no quiero un valor predeterminado. Me gustaría especificar a qué cadena de resolución resolver cuando llamo al comando Ivy resolve. Algo como esto:

<ivy:resolve transitive="false" resolveMode="snapshot-resolve" conf="compile,test"/> 

¿Es esta la manera incorrecta de cambiar los repos que necesito resolver?

La tarea de publicación tiene un atributo "resolver" que funciona perfectamente para mí de manera similar.

Además, en mi ejemplo particular, puedo tener varias ramas de SVN correspondientes a múltiples repositorios de instantáneas de Artifactory. ¿Puedo parametrizar la forma en que resuelvo a qué repos? ¿O es la forma más correcta de colocar instantáneas de todas las ramas en un repositorio, y usar la función de rama Ivy?

Háganme saber si necesita cualquier otra información para ayudar.

Respuesta

0

Así que tiene compilaciones de versiones y características o compilaciones de desarrollo. Obtendrá las compilaciones de lanzamiento desde el tronco y las compilaciones de características de las ramas 1.1.0. No use el tronco para el desarrollo en absoluto. Haga todo el desarrollo en esas ramas de características, cuando maduren y decida incluirlas como parte de la versión unirlas al tronco. En ese punto, este código aparece en las compilaciones de QA que provienen del tronco. A medida que se prepara para lanzar, se ramifica desde el tronco, mientras sigue trabajando en otras ramas de características y fusionándolas en el tronco.

Así que QA obtiene compilaciones desde el tronco y desde las ramas de liberación de estabilidad. Puede simplificar aún más si solo tiene una versión a la vez y siempre realiza el control de calidad solo desde la línea troncal y la rama o la etiqueta justo en el momento de la publicación. Esto sería posible si no hay absolutamente ningún desarrollo que vaya al enlace troncal, sino a todas las ramas de características.

A veces tendrá que ser capaz de pasar una compilación de desarrollo a QA. Por lo general, antes de fusionar la rama de características con el tronco, solo para asegurarse de que no haya roto nada. Puede etiquetar premezcla, fusionar la función de la rama en el enlace troncal y hacer la construcción de control de calidad desde el enlace troncal en este caso y si hay problemas graves, puede volver a la etiqueta. Evitará la fusión desde otra rama de características, mientras esto está sucediendo, pero si las fusiones al troncal son poco frecuentes, esto podría funcionar.

De esta forma puede tener una configuración única para control de calidad desde la troncal y debe administrar la mayor parte de lo que necesita hacer.

Cuestiones relacionadas