2008-09-05 54 views
38

Actualmente, mi equipo está tratando de automatizar la implementación de nuestras aplicaciones web .Net y PHP. Queremos simplificar las implementaciones y evitar las molestias y muchos de los dolores de cabeza causados ​​por hacerlo manualmente.Despliegue automatizado para aplicaciones web?

se requiere una solución que nos permita:

- Compile the application 
    - Version the application with the SVN version number 
    - Backup the existing site 
    - Deploy to a web farm 

Todos nuestros sistemas son fuente controlada usando SVN y nuestras aplicaciones .Net utilizan climatizador. Hemos intentado utilizar scripts de implementación de MSBuild y NAnt con un éxito limitado. También hemos usado Capistrano en el pasado, pero deseamos evitar usar Ruby si es posible.

¿Hay alguna otra herramienta de implementación que nos ayude?

+1

Una solución de automatización de publicación de aplicaciones está diseñada específicamente para esto, puede encontrar una lista de herramientas notables aquí: https://en.wikipedia.org/wiki/Application_release_automation –

Respuesta

32

Gracias a todos por sus amables sugerencias. Los revisamos todos, pero después de una cuidadosa consideración, decidimos lanzar el nuestro con una combinación de CruiseControl, NAnt, MSBuild y MSDeploy.

este artículo tiene una gran información: Integrating MSBuild with CruiseControl.NET

Aquí es más o menos cómo nuestra solución funciona:

  • los desarrolladores a crear la versión 'depuración' de las pruebas de aplicaciones y la unidad de ejecución, a continuación, comprobar en SVN .
  • CruiseControl ve las actualizaciones y llama a nuestro script de compilación ...
    • Runs nuevas migraciones en la base de datos de construcción
    • reemplaza los archivos de configuración con la configuración de servidor de compilación
    • construye la configuración de 'depuración' de la aplicación
    • ejecuta todas las pruebas unitarias y de integración
    • construye la configuración 'deploy' de la aplicación
      • Versiones de las DLL con la versión principal/secundaria actual y la revisión de SVN, por ejemplo 1.2.0.423
      • Se mueve esta nueva construcción en una carpeta de 'liberación' en nuestro servidor de compilación
      • Elimina archivos innecesarios
    • Actualizaciones IIS en el servidor de compilación si se requiere

Entonces cuando hayamos verificado que todo está listo para subir a live/staging, ejecutaremos otro script para:

  • migraciones se ejecutan en vivo servidor/puesta en escena
  • MSDeploy: actual Archivo de sitio en producción/montaje
  • MSDeploy: sitio de sincronización de acumulación de vivir/puesta en escena

no fue bonito llegar a esta etapa, pero es en su mayoría funciona como un encanto ahora: D

Voy a tratar de mantener esta respuesta actualizada a medida que hacemos cambios en nuestro proceso, ya que parece que hay varias preguntas similares sobre SA ahora.

+0

¿En qué se escriben tus migraciones? ¿SQL directo? Además, ¿cómo manejas los archivos de configuración? –

+0

Actualmente utilizamos las migraciones de Ruby. El script de construcción llama a Rake y todo está solucionado. Sin embargo, estamos trasladando todas nuestras prácticas a alt.net, por lo que es probable que cambiemos esto pronto. En cuanto a los archivos de configuración, Cruise Control reemplaza la configuración de desarrollo con su propia configuración de compilación antes de compilar –

+1

. Supongo que cuando usted versión de la DLL ingresa o retira sus archivos de AssemblyInfo. ¿Cómo se configura CruiseControl para que ignore el control SVC de los archivos AssemblyInfo? Estoy buscando una solución similar y me preocupa que esto cause un ciclo de compilación infinito. – rie819

0

Fabric. Parece pequeño, simple, de procedimiento. Escrito en Python, ya que Ruby es un no-no (¿por qué?).

+0

¿Está sugiriendo esto? como una herramienta de automatización de construcción? Entiendo que SSH es ideal para transmisiones seguras, pero ¿cómo es que esto facilita la implementación? – BozoJoe

0

Echa un vistazo a Setup Factory (de indigo rose). Es bastante robusto en lo que puede hacer. Utiliza la API de instalación de Windows. Probablemente puede hacer lo que necesita.

3

he utilizado Visual Build Pro desde hace años, es bastante resbaladiza y fácil de usar y tiene muchas operaciones estándar (como los que usted ha mencionado) incorporadas.

+0

thumbs up para Visual Build Pro de Kinook – BozoJoe

3

utilizo Puppet, Makefile para construir RPMs y Bamboo para hacer esto para mi. Mi sistema no se aplica directamente, y no estoy familiarizado con el mundo de Windows, pero hay algunos patrones transferibles.

La configuración de mi marca me permite crear RPM para todo (php libs, sitios web php, módulos perl, aplicaciones C, etc.) que componen mi aplicación. Esto se puede llamar manualmente o a través de Bamboo. Transfiero estos RPM a un yum repo y manejadores de marionetas asegurándome de que las versiones más recientes (o correctas) de software estén instaladas en el clúster.

¿Podría automatizar la creación de paquetes de software en MSI? Creo que Puppet puede administrar la instalación de paquetes de software y versiones en Windows.

+0

Puppet para Windows es algo que estoy investigando. Los archivos MSI para Windows son más problemas de lo que vale, creo. MsDeploy contiene la semántica para implementar en los servidores IIS (con conocimiento sobre grupos de aplicaciones, acls y sitios web/aplicaciones web), de modo que asignar las invocaciones de msdeploy al lenguaje de consulta de estado de títeres sería la solución más elegante. – Henrik

1

En lugar de usar xcopy logramos utilizar el comando -source: dirpath con direcciones UNC en los servidores con msdeploy. La clave estaba en los ignoreAcls = true y la eliminación de las llamadas a nombre de usuario y contraseña en la cadena MSDeploy:

msdeploy -verb:sync -source:dirpath=\\build\e$\app -dest:dirpath=\\live\d$\app,ignoreAcls=true 

El ejemplo despliega el sitio de la unidad E de nuestro servidor de compilación a la unidad D en nuestro servidor en vivo. Existen algunas consideraciones de seguridad con la exposición de recursos compartidos o este nivel de acceso al disco en un servidor activo. Actualmente estamos buscando utilizar una carpeta compartida de acceso limitado.

Luego, canalizamos esta salida a un archivo de registro que luego se mueve al archivo de respaldo para referencia. Los registros del archivo de registro de los archivos que se movían y when.Continuing el ejemplo anterior con el comando tubería de salida:

... > E:\archive\msdeploy.log 
2

que utilizan MSDeploy para esto. Funciona perfecto.

Acerca de Ant; para la plataforma .NET tenemos NAnt y puede usarlo en combinación con MSDeploy; tienes la posibilidad de llamar a MSDeploy desde tu script de Nant.

Editado: Solo para aclarar las cosas; puedes hacer todo con msdeploy. Usar Nant no es un requisito.

+0

También puede usar MSBuild, que es lo que Microsoft quiere que use en lugar de NAnt. Con las diversas bibliotecas de tareas contrib es bastante agradable. – Rob

+0

No estoy usando Nant tampoco, ¡pero fue solo una sugerencia en caso de que realmente quiera seguir usando Nant! –

0

La única razón por la que Nant debería existir es para que tenga un marco similar a Ant en el que podamos escribir tareas utilizando el conjunto de lenguajes .NET.Si no quiere que un desarrollador .NET puro escriba Tareas personalizadas, no veo ninguna razón por la que no pueda usar Ant. Solo porque usted escriba su aplicación en un lenguaje .NET, no significa que tenga que usar una herramienta de compilación .NET.

1

Nadie mencionó Final Builder http://www.finalbuilder.com. Está a la par con Visual build Pro. Buena GUI para crear arneses automatizados de implementación de construcción

Cuestiones relacionadas