Control de versiones: ¿Cómo mantengo las bibliotecas comstackdas de códigos actualizadas en múltiples sitios web?

Actualmente, tenemos una larga list de varios sitios web en la intranet de nuestra compañía. La mayoría están dentro de un firewall y requieren una count de Active Directory para acceder. Uno de nuestros problemas, últimamente, ha sido el aumento en el número de sitios web y la adición de una biblioteca de códigos común que almacena nuestras classs de acceso a la database, funciones de ayuda comunes, methods de serialization, etc. El objective es usar ese marco en todo todos los sitios web en toda la compañía.

Actualmente, hemos actualizado la aplicación interna de ingreso de datos con estos cambios de manera consistente. Está actualizado. El problema, sin embargo, es mantener todos los otros sitios web. ¿Existe una mejor práctica o forma en la que descubro versiones en cada website y actualizo en consecuencia? ¿Puedo tener un lugar centralizado donde guardo estos files DLL y sitios para hacer reference a ellos? ¿Cuál es la mejor manera de averiguar qué versiones hay en estos sitios web sin tener que pasar por todos y cada uno de los sitios web, averiguar la versión y actualizar después de cada cambio?

Tenga en count que ejecutamos el más nuevo TFS y somos un equipo de desarrollo .NET.

En mi trabajo, tenemos una configuration similar a usted, muchas aplicaciones internas que usan bibliotecas comunes, y he pasado la mejor parte de un año clasificando todo esto.

Lo primero a tener en count es que nada de lo que mencionó realmente tiene algo que ver con TFS, pero es realmente un síntoma de la forma en que se empaquetan y despliegan sus aplicaciones y sus componentes.

Aquí hay algunas ideas para comenzar:

Configurar construcciones automáticas / continuas

Esto es lo primero que debes hacer. Use la installation de compilation en TFS si es necesario, o realice la inversión en algo como TeamCity (que es genial). Evalúa todo. Encuentra algo que ames y con el que todos puedan vivir. La razón por la que necesitas encontrar algo que ames es porque finalmente serás responsable de ello.

La razón por la que configurar versiones automáticas es tan importante es porque ese es su punto de partida para resolver el rest de sus problemas.

Configurar la implementación automatizada

Todos los artefactos desplegables deberían ser construidos por su server de compilation. No más deployment manual. No más deployment desde estaciones de trabajo. No más function de publicación de Visual Studio. Es difícil alejarse de esto, pero vale la pena.

Si tiene muchos proyectos web, investigue utilizando el deployment web que se puede automatizar fácilmente utilizando msbuild / powershell o imagínese y pruebe algo como el deployment del pulpo.

Paquete de componentes comunes usando Nuget

Por ahora, su código común debería tener sus propias comstackciones automáticas, pero ¿cómo despliega automáticamente un componente común? Empaquetarlo en Nuget y ponerlo en un recurso compartido para su consumo o alojarlo en un server nuget (TeamCity tiene uno integrado). Un buen server de compilation puede actualizar automáticamente sus packages Nuget (si siempre necesita estar en la versión más reciente), y puede inspeccionar a qué versión se refiere comprobando sus packages.config .


Sé que esto es mucho para asimilar, pero es en esencia lo fundamental para avanzar hacia la entrega continua (http://continuousdelivery.com/).

Tenga en count que get este derecho le llevará mucho time, pero que el process es gradual y puede evolucionar con el time. Sin embargo, cuanto más espere, más difícil será. No sientas que necesitas actualizar todos tus proyectos al mismo time, no es así. Solo los que están causando más dolor.

Espero que esto ayude.

Me gustaría salir del espacio de una solución específica para su problema y abordar el deseo subyacente que tiene de consolidar su carga de trabajo. Tenga en count que cualquier escenario de parchado / actualización tendrá costos que debe abordar, no existe una píldora mágica. Particularmente, lo que desea lograr generalmente implicará una sobrecarga de compilation / implementación (como jonnii ha descrito), o una sobrecarga de time de ejecución (al validar las nuevas versiones para garantizar que todo funcione como se espera).

En su caso, debido a que ya ha construido sus productos, espero que vaya a la ruta de compilation / implementación.

Solo recuerde que incluso con la equivalencia binaria (todo comstack y las testings unitarias pasan), existe el riesgo de que la aplicación se comporte de manera diferente después de una actualización, por lo que no podrá evitar al less algunas testings rudimentarias en todos sus componentes. aplicaciones (el enfoque GAC es particularmente vulnerable a este riesgo).

Es posible que le resulte más fácil aceptar que el hecho de haber creado una nueva versión de un binary no significa que deba implementarse en todas las aplicaciones web, incluso aquellas que ya están funcionando correctamente (si algo no está roto). ..).

Si eso es aceptable, entonces networkingucirá su carga de trabajo al incurrir solo en gastos de resources en aplicaciones de testing que realmente necesitan ser tocadas.