He estado trabajando en la estandarización de la estructura de control de origen para nuestro despliegue de Team Foundation Server para el nuevo año. Empecé utilizando la documentación Microsoft Team Foundation Server Branching Guidance disponible en CodePlex.Team Foundation Server Estructura de control de fuente
Tenía la esperanza de obtener algunos comentarios y respuestas a algunas de las preguntas específicas que tengo sobre la estructura propuesta. Cuando se trata de estructurar el control de fuente en TFS, aprendí que hay tantos "estándares" para elegir que no existe realmente un estándar.
En primer lugar, describiré y describiré las decisiones y el uso.
$/
{Team Project}/
{Subproject}/
Development/
Trunk/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Integration/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Production/
Releases/
{Release Version}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
La lógica general es que un proyecto de equipo puede contener ya sea un proyecto único lógico (donde no habría {Subproject}
entrada) o múltiples proyectos relacionados en la forma de un conjunto de productos o herramienta. Los tres contenedores principales se llaman Development
, Integration
y Production
.
En el Troncal del contenedor Development
, hay disposiciones para ambos proyectos que componen el producto en la carpeta Source
, con las pruebas de unidad correspondientes disponibles en la carpeta Tests
. La mayoría del desarrollo menor se produciría en el tronco, con la bifurcación disponible a través de la carpeta del hermano Trunk
de la carpeta Branches
, que actúa como un contenedor de bifurcación. Uno o más archivos de solución vivirían dentro del Trunk
, lo que permite ramas en ese nivel para capturar la solución, la fuente y las pruebas unitarias.
El contenedor Integration
, a menudo llamado "principal" en la implementación no TFS, se utiliza únicamente para integrar conjuntos de cambios desde Development
para crear una compilación estable y comprobable. Inicialmente se creó como una rama del contenedor Development
una vez que se ha alcanzado un producto comprobable. Las construcciones de este contenedor se usarán para nuestro entorno de prueba y para el entorno de prueba de carga. Elegimos incluir pruebas de carga con construcciones comprobables para que podamos monitorear los cambios en el rendimiento, pudiendo aislar rápidamente los conjuntos de cambios que pueden haber contribuido a cualquier irregularidad.
Production
se utiliza para producir compilaciones de calidad de producción y preproducción. Inicialmente se creó como una bifurcación desde el contenedor Integration
una vez que se ha recomendado una versión estable para la versión. Dentro de la carpeta Releases
, se sigue una estructura de "sucursal por publicación", que proporciona instantáneas y aislamiento en un solo lugar. (Por ejemplo, cuando Release 1.1
está listo para una compilación previa a la producción, el contenedor estable Integration
se ramifica en una nueva carpeta Release 1.1
en la estructura Production/Releases
. Los RC posteriores y los RTW/RTM también se promueven en esta carpeta.) Una estructura de ramificación también está presente, como se ve en el contenedor Branches
. Esto permite "hotfixes", generalmente un marcador de revisión (Major.Minor.Revision). La rama se crea a partir de la versión actual y se fusionó de nuevo en el nuevo marcador de revisión, como Release 1.1.1
. El Changeset se integraría de forma inversa al Development
del contenedor Trunk
en el momento de la aceptación.
Creemos que esta estructura es un equilibrio justo entre robustez y complejidad. Pero hay algunas preguntas persistentes que no puedo encajar lógicamente en el modelo. Ellos son:
equipo de construcción - Los contenedores Development
y Integration
comenzarán inicialmente como la causa de compilaciones nocturnas, con el tiempo se mueve a integración continua (CI).El contenedor de Producción se construirá manualmente.
¿Dónde deberían estar las definiciones de construcción?Editar: en función de un par de respuestas, la carpeta TeamBuildTypes se ha movido al tronco y se ha ramificado a los contenedores apropiados. Esto, sin embargo, lleva a una nueva pregunta (sigue).Al tener la carpeta TeamBuildTypes en sus contenedores adecuados, ¿significa eso que todas las definiciones de compilación se reproducirán entre las carpetas apropiadas? Por ejemplo, tener una definición de compilación para compilaciones de calidad de desarrollo, así como compilaciones comprobables, etc. todas las que viven en todas las carpetas de TeamBuildType en toda la estructura.
Generación de documentación - Utilizamos castillo de arena para generar la documentación. Específicamente, también usamos Sandcastle Help File Builder para administrar la salida. Esto produce un archivo de proyecto en un formato específico para SFHB.
¿Debería almacenarse la documentación generada en la estructura de control de origen?
¿Se debe generar documentación para cada contenedor, o solo posee valor para las compilaciones de calidad de preproducción y producción?
Para preservar los tiempos de compilación locales rápidos, ¿la creación de documentación debe ser propiedad de una definición de compilación?
¿Dónde deberían estar los archivos específicos de SHFB? Mi idea inicial es ponerlo como un par en las carpetasEstoy de acuerdo con las recomendaciones de que sea un parSource
yTests
.Source
yTests
. Diagrama cambiado para reflejar este cambio.
Binarios de terceros
En caso de binarios (controles, bibliotecas, etc.) se almacenan en control de código fuente?
Si es así, ¿debería ser su propio proyecto de equipo?
Documentación General - Documentación para no generada, como los requisitos, documentos de diseño, planes de prueba, etc., no van a ser reflejada por una carpeta de la estructura de control de origen. Después de algunas investigaciones y discusiones con mis desarrolladores y compañeros, usar la carpeta integrada de Documentos en Team Explorer proporciona más beneficios, ya que refleja la estructura dentro del Team Project Portal y algunos usuarios (de negocios) no necesitan la complejidad adicional de aprender el aspecto de control de fuente de TFS.
Voy a actualizar la estructura a medida que obtengo las respuestas a las preguntas para proporcionar una imagen más clara. También doy la bienvenida a cualquier otro comentario relacionado con posibles cambios. Si tengo alguna otra pregunta, me aseguraré de modificar esta publicación.
ediciones:
aclaración. Las carpetas
Source
yTests
también viven bajo el contenedorIntegration
.Tanto Miqueas y Josh criados grandes puntos con respecto a los binarios de terceros. Pregunta agregada sobre el problema.
La generación de documentación puede ser lenta. Se agregó una pregunta sobre si la creación de documentación debe ser propiedad de un tipo de compilación de equipo específico.
resolución Agregado relacionada con documentación que no sea generada, como los requisitos, documentos de diseño, planes de prueba, etc.
Agregado resolución relacionada con la carpeta TeamBuildTypes para DEFINCIONES construcción.
En función de varios comentarios, moví la carpeta TeamBuildTypes a los niveles de troncal/rama.
Error deletreado Foundation :) – thmsn
Este es un diseño y una explicación realmente grandiosos. – Micah
¡Uf! Gracias, ¡esto! –