Recientemente hemos actualizado nuestro sitio web ASP.NET a una aplicación web y estamos sorprendidos por el repentino salto en la dificultad al implementarlo. Teniendo en cuenta lo común que debe ser esta tarea, me preguntaba qué complementos / software utilizan las personas para implementar un proyecto que evoluciona rápidamente y se almacena de forma remota (es decir, un sitio web).
Debe haber una mejor manera que simplemente "Publicar" en Visual Studio y luego tener que enviar manualmente por FTP los archivos que han cambiado. No menos importante porque el sitio se cae cuando estamos cargando nuestros .DLL.
Hay tantas excepciones de archivos complicados que preferiría automatizar el proceso tanto como sea posible, para evitar cargas accidentales.
Con nuestra antigua solución (en nuestro sitio web) utilizamos Dispatch for ASP que sacudió totalmente e hizo todo el proceso con un solo clic. Lamentablemente, no es excelente para las DLL (como se mencionó anteriormente).
Entonces, ¿cómo lo hace tu equipo?
Gracias por cualquier consejo
PD: he leído que se supone que Visual Studio 2010 abordará estas deficiencias en VS2005 / 08, pero hasta entonces ...
fuente
Respuestas:
Recomiendo encarecidamente utilizar la integración continua.
Utilizamos una combinación de TeamCity para CI, Rake y Albacore para automatizar la compilación.
TeamCity verificará el código de su repositorio de código fuente, luego, utilizando Rake, compilará la aplicación, ejecutará pruebas unitarias e incluso ejecutará los scripts de la base de datos si así lo desea. Después de una compilación exitosa, puede empaquetar su código fuente en un archivo zip o copiarlo en el destino que elija.
Usamos Git, aunque TeamCity funciona con todos los sistemas de control de código fuente.
Usar TeamCity y Rake sería similar a usar CruiseControl y NANT, sin la edición de archivos XML. Por supuesto, puede usar TeamCity con NANT si lo prefiere.
Una muestra corta extraída de un archivo rakefile.rb que realiza la compilación. En mi humilde opinión, más fácil de leer y depurar que un archivo XML.
Albacore es un conjunto de tareas de Rake específicamente creadas para implementar aplicaciones .NET.
fuente
En Linux, he usado fabric (fabfile.org) y capistrano (capify.org), que son herramientas de automatización para ayudar en los comandos remotos SSH y SCP. Si tiene Cygwin instalado en sus hosts de Windows, debería poder reutilizarlos como herramientas de implementación.
fuente
"Publicar" una aplicación web en Visual Studio se puede ejecutar desde la línea de comandos como
msbuild "C:\proj\yourprojectpathandfilename.csproj" /deploydir:"C:\some\deploy\dir"
. El directorio de destino es una aplicación web desplegable.Las otras respuestas que cubren su pregunta más amplia son buenas. También agregaría que debe mirar varios proyectos de aplicaciones web de código abierto y copiar el proceso de compilación que más le guste.
fuente
Estoy de acuerdo con Scott en que esto puede ser muy complicado y fácil de pasar por alto. La estrategia de implementación también es muy específica de la aplicación. Si su aplicación está completamente autocontenida en una carpeta, podría ser más fácil que una aplicación que hace referencia al GAC. Lo que a su vez podría ser más fácil aún que un servidor que necesita mantener múltiples versiones de una aplicación que hace referencia a múltiples versiones de ensamblajes del GAC. No queremos comenzar a hablar sobre archivos de políticas aquí :).
Dicho todo esto, combinar la herramienta de implementación web de Microsoft con el enrutamiento de solicitud de aplicaciones es una buena opción. En IIS7, es posible crear paquetes de instalación utilizando la herramienta. También es posible apuntar la herramienta a una aplicación web y hacer una copia de seguridad de toda la aplicación en una carpeta de archivo de la aplicación. A continuación, puede implementar desde esta carpeta de archivo en un servidor web IIS6 o IIS7 (no se admite IIS5). Usaría el enrutamiento de solicitud de aplicación como Scott sugirió separar en vivo de los sitios web de prueba. Una vez que haya verificado que el sitio web recién publicado es bueno, puede configurar ARR para que se dirija a la nueva versión.
fuente
PyroBatchFTP funciona muy bien para esto. Empujará solo los cambios y puede hacer un script para que pueda presionar con un doble clic en un archivo por lotes.
En Vaasnet hemos configurado la solución ideal para nosotros, pero es bastante complicado configurarlo, pero vale la pena usar algunos o todos estos elementos si es posible. Esto es lo que es:
Por lo tanto, el resultado neto nos permite registrarnos en SVN y hacer que se compile automáticamente y se ponga en producción sin ninguna interacción manual. Después de probar nuestra URL provisional y determinar que está lista para comenzar, iniciamos sesión en un sitio simple y con 1 clic, está en vivo.
fuente
Para otra forma que no se ha sugerido, lo remito a 'Gu' y a los proyectos de configuración web
Básicamente, esto crea un instalador MSI para su aplicación .NET. Este ejemplo es para VS2005, pero tengo VS2010 y el tipo de proyecto todavía está allí. Esto puede darle mucha personalización si la necesita, o solo la instalación básica si no la necesita.
Personalmente, donde trabajo, simplemente hacemos una implementación de estilo xcopy, pero eventualmente me gustaría entregar un paquete al grupo de servidores, dándoles el control sobre cuándo y cómo se implementa. (Creo que esto también podría facilitar las implementaciones masivas utilizando algo como la política de grupo, pero no estoy muy familiarizado con eso)
fuente
Hay muchas formas de desollar este gato, realmente depende de cuánto acceso pueda tener en su servidor. Mi método favorito personal últimamente es configurar un script de compilación dentro del proyecto (típicamente usando MSBUILD) que empaqueta todos los archivos de implementación, luego uso SVN para conectarlos a la producción. Y para versionar los archivos de producción.
En cuanto a la base de datos, la mejor opción es utilizar algún tipo de marco de migración. Una vez más, un montón de esos corriendo y sin una respuesta realmente clara.
fuente
Personalmente, solo uso un script vbs que escribí para copiar carpetas de tipos de archivo específicos en el servidor de desarrollo (es decir, omitir archivos cs, etc.).
fuente
Cuando trabajé en una gran empresa .com, esto es lo que hicimos con nuestras implementaciones .net.
Todo nuestro código fuente y procedimientos almacenados se almacenaron en SVN. Cada noche, un trabajo de base de datos ejecuta y extrae los procesos almacenados de producción y los desliza en un directorio en SVN para que siempre haya una versión más actual en el control de origen.
El día de la implementación de un proyecto, usaríamos un script nAnt para extraer los proyectos de SVN, hacer una compilación personalizada de los proyectos y extraer cualquier dependencia que estos proyectos necesitaran. Una vez que se ejecutó el script nAnt, se empaquetó en un archivo zip autoextraíble. Los procesos almacenados que estaban asociados con esta implementación se registraron en el control de origen y se actualizó una hoja de distribución de Excel con los scripts para ejecutar y en qué orden.
Cuando se activó el despliegue, el archivo zip autoextraíble se transfirió al servidor donde se inició. Todos los archivos se extrajeron en los directorios correctos y el DBA ejecutó los procesos almacenados en la base de datos de producción.
En una implementación típica que usa este sistema, pasamos de una implementación de cinco a seis horas a menos de una hora o menos.
Buena suerte y espero que esto ayude a algunos a encontrar una manera de implementar su aplicación.
fuente
La navaja de afeitar de Occam suele ser el enfoque preferido: cuanto más simple, mejor. FTP es fácil con poca o ninguna complicación. Algunas personas usan XCOPY, Filezilla o WSFTP, otras pueden usar la herramienta de implementación web de MS (que aún no conozco), pero en general, hay una mejor manera de implementar aplicaciones web ASP.NET (y otras aplicaciones en general). En mi opinión, si se toma en cuenta la implementación desde el comienzo del desarrollo, la implementación se puede integrar con la aplicación web, lo que lo convierte en una implementación relativamente fácil y sin problemas en el futuro.
Como desarrollador de .NET que ha trabajado en varias compañías que desarrollan aplicaciones web ASP.NET que varían en tamaño, complejidad y número de usuarios (desde varios cientos de usuarios hasta decenas de miles), el "despliegue" de la OMI es a menudo el tema más "fluido". Algunas organizaciones lo llevan demasiado lejos en términos de burocracia, mientras que otras no abordan ningún problema con la implementación. En mi experiencia, los problemas con la implementación tienden a caer en 1 o más de 3 categorías en términos de dificultades / fallas:
La implementación se ignora / olvida en profundidad durante la fase de diseño: la mayoría de las aplicaciones web tienden a incorporar un servidor web y una base de datos. Más allá del código de la aplicación, tal vez algunos procedimientos almacenados y tablas de bases de datos, la implementación no necesita mucha reflexión. ASP.NET es más que capaz de ayudar en la implementación, pero la mayoría de las veces los desarrolladores se distraen en términos de ejecutar la aplicación real y realizar su tarea, dejando el cómo de la implementación como un problema separado.
La implementación es compleja en múltiples sistemas y personas en juego: la complejidad es una perra. Desde MSMQ, procedimientos almacenados T-SQL y disparadores, Reporting Services, mensajería SOAP / XML, autenticación AD, SSAS / SSIS, etc. etc., la cantidad de tecnologías en juego aumenta la cantidad de personas involucradas. Lo peor de todo, todos estos componentes diferentes generalmente son administrados por diferentes entidades dentro de una organización. A menos que todos estén sincronizados entre sí, las implementaciones pueden aumentar su complejidad rápidamente y conducir a múltiples puntos de falla.
Pereza, apatía o falta de comunicación y / o gestión: desde poca o ninguna documentación hasta la falta de comunicación y protocolo coordinados, es fácil arruinar un proceso relativamente simple. La implementación debe ser un procedimiento simple con numerosas comprobaciones en su lugar mientras se documenta lo que se hace, pero a menudo nunca es así. La mayoría de la gente solo quiere que el maldito sitio esté funcionando. En mi experiencia, a las personas (no programadoras) realmente no les importa hasta que algo se vuelve realmente fubar. La responsabilidad rara vez recae en una sola persona para hacer el despliegue, ya que nadie realmente quiere ser la razón del fracaso, por lo que la responsabilidad generalmente se dispersa.
No conozco ningún proveedor disponible para automatizar la implementación, aunque no me sorprendería si hubiera algunos. Probablemente podría escribir una solución a través de VBScript / WMI o una secuencia de comandos por lotes, pero la realidad es que necesita adaptar una solución para sitios ASP.NET más complejos. Sitios simples que consisten en páginas, conectividad de base de datos y nada más, no necesita hacer tanto, así que escale sus esfuerzos de implementación de acuerdo con la complejidad de la aplicación misma.
Hasta ahora, en mi trabajo actual, la implementación aún se realiza a través de FTP y mueve un montón de archivos. Es feo, fácil de fastidiar y no tiene la sensación de tener una historia precisa. Por supuesto, puedes revisar los registros FTP, nadie se molesta en hacerlo. Nuestras aplicaciones son bastante simples sin mucha necesidad más allá de FTP. La forma en que mi equipo implementa nuestras aplicaciones web es realmente poco o nada útil para usted. En cambio, prefiero aprovechar esta oportunidad para sugerir mejores prácticas.
Me doy cuenta de que esta publicación puede ser exagerada para la pregunta que se hizo originalmente. Desafortunadamente, la implementación no es algo simple, ya que las aplicaciones pueden variar en complejidad. Apuesto a que la mayoría de las organizaciones que implementan aplicaciones ASP.NET complejas han desarrollado con el tiempo ciertas estrategias que funcionan (al menos) de manera confiable.
fuente