Integración controlada de cambios con continuous integration

Tengo un instalador de NSIS que creamos previamente usando scripts nAnt que copyn algunos files y ejecutan makensis.exe a través de una tarea ejecutiva para comstackr el exe del instalador. Después de que la secuencia de commands nant se completa, tengo la estructura compelte para nuestro CD y también nuestra descarga.

Estaba haciendo un get de sourcesafe en un escritorio no usado y usándolo como un cuadro de compilation, comstackndo allí. Algunas veces tenemos que revisar un par de files para arreglar algo crítico. En esos casos, iría al cuadro de compilation y, de forma muy selectiva, obtendría solo esos files, para evitar get otros files modificados que aún no estamos listos para lanzar. Básicamente, puedo permitir que el desarrollo continúe e include selectivamente ciertos files modificados en el instalador para su lanzamiento.

Ahora ya no tenemos una caja libre, y necesitamos build desde nuestro server. Así que estoy configurando CI Factory para que el desarrollador pueda patear la construcción sin tener que hacer una connection remota al server. El único problema con el que estoy luchando es la mejor manera de continuar permitiendo que ocurra este control de cambio selectivo. El concepto pnetworkingeterminado de CI que CI Factory implementa está bien para el desarrollo interno "head". Sin embargo, también quiero configurar un proyecto de CCNet que se ejecute únicamente bajo demanda a través de una compilation forzada para este tipo de versión de "publicación pública".

Esto es lo que he pensado hasta ahora, sin estar seguro de qué tan bien funcionará esto, en todo caso (todavía estoy averiguando de qué se tratan CCNet y CI Factory). La configuration / creación del proyecto CCNet de "publicación pública" se configuraría de manera tal que no fuera la más reciente. Las modificaciones no desencadenarían una compilation. Dado que el otro proyecto de CCNet que está utilizando la metodología de CI pnetworkingeterminada (lo llamaremos el "proyecto de CI") para get la última versión cuando se detectan cambios, estos dos proyectos no pueden compartir el mismo directory de trabajo. Por lo tanto, el "lanzamiento público" necesitaría una copy de trabajo diferente, de modo que sus files no se actualizarán cuando se active la compilation del proyecto de CI. El desarrollador necesitaría acceder de manera remota al server, un VSS, ingresar selectivamente a la copy de trabajo de "publicación pública" y luego forzar una compilation a través de CI Factory.

La desventaja que veo con esto es
1) Tener que acceder de forma remota para get selectivamente.
2) No tengo idea de cómo permitir que un único proyecto de CI Factory tenga dos copys de trabajo diferentes de la carpeta Producto, de forma que cada bloque de configuration del proyecto tenga su propio.
3) Tengo miedo de qué tipo de extrañeza esto pueda causar. Todavía no estoy seguro de cómo especificar un bloque de control de fuente en el bloque de configuration de proyecto de CCNet, pero evito que obtenga una versión más reciente cuando se genera. Todavía estoy averiguando qué cosas hay en las secuencias de commands y puedo sacarlas fácilmente sin romper otras cosas, frente a lo que no está destinado a ser manipulado y / o no configurable.

Realmente me gustaría escuchar acerca de cómo otros tratan el tema de la liberación selectiva de cambios, si tiene una situación similar. Estoy obligado a VSS, por lo que mi necesidad inmediata es resolver esto con eso en mente, pero al mismo time me interesaría escuchar cómo lo maneja con otros sistemas de control de fuente. Supongo que probablemente tengas una sucursal que sea tu última twig de desarrollos, y luego fusionarás los cambios en el baúl cuando quieras liberarlos. Realmente no confío en VSS para la bifurcación / fusión, y creo que los conceptos de bifurcación pueden ser un exceso de sobrecarga y curva de aprendizaje para esta tienda. Sin embargo, como dije, las historias con otros sistemas de control de fonts serían útiles para mí en el futuro.

Gracias por adelantado.

Necesita una estructura de bifurcación en su repository para facilitar esto. Algo así como el método de la twig de publicación. Solo las personas seleccionadas pueden comprometerse con esta twig (o tener una versión / estable para eso). Configure su IC manual para iniciar desde la twig de publicación como lanzamiento nocturno promocionar a hito o final desde allí. No me gusta la idea de modificar cosas manualmente en tu máquina de construcción. Configure los cambios en el control de versiones, en un lugar seguro para preparar su versión y permita que CI construya desde allí, pero se active manualmente.

Echa un vistazo a estos patrones de ramificación . Sugerí C3, codeline-per-release, a menudo llamado release branching.

Aquí hay un artículo sobre la ramificación de VSS que incluye un enlace para fusionar.

Esta pregunta es similar.

Tal vez podría pasar a otro sistema de control de fuente con mejor soporte para este tipo de cosas. ¿Alguna sugerencia de la gente de MS por ahí?