build-process workflow release-management

build process - Flujo de trabajo de creación/implementación de aplicaciones



build-process workflow (8)

¿Qué utiliza para administrar el flujo de trabajo de implementación de su aplicación una vez que se completa la compilación? No estoy hablando solo del acto de obtener archivos en un servidor, estoy hablando de lo que sucede después de eso. Verificación, pruebas, aprobación, migración a producción, retiro de construcciones antiguas, etc.

Ejemplo:

  1. Compilación completa
  2. La compilación se implementa en un entorno de prueba
  3. Pruebas completadas ( paso manual )
  4. Si los pases de prueba se despliegan a UAT, de lo contrario rechazará la compilación
  5. Se completa la UAT ( paso manual )
  6. Si UAT pasa el despliegue a Prod else rechace la compilación
  7. Retirar construir previamente en Prod

¿Alguna buena aplicación que pueda administrar flujos de trabajo de compilación de larga ejecución?

Actualizar

También debo mencionar que estoy buscando herramientas que implementen el flujo de trabajo y no solo para hacer un seguimiento del estado en que se encuentra. (Copiar compilación, cambiar estado de compilación, enviar correos electrónicos, iniciar / detener servicios, etc.)


Estos sistemas de compilación y lanzamiento son una mezcla de diferentes cosas, así que siguiendo tu lista, te responderé:

  1. Compilación completa (CruiseControl con Maven Build)
  2. La compilación se implementa en un entorno de prueba (tarea Ant, llamada desde CruiseControl)
  3. Se completó la prueba (paso manual) (Maven le dice esto)
  4. Si las pruebas pasan la implementación a la UAT, rechace la compilación (si las pruebas fallan, Maven no finalizará, no se realizará ninguna llamada al desplegador de hormigas)

De aquí en adelante, lo hacemos prácticamente con una mezcla de scripts de Ant y Bash.

  1. Se completa la UAT (paso manual)
  2. Si UAT pasa el despliegue a Prod else rechace la compilación
  3. Retirar construir previamente en Prod

Lo más difícil que hemos encontrado fue reiniciar nuestros servidores de aplicaciones, ya que no hemos tenido buenas experiencias con implementaciones en caliente, pero es factible solo con maven, ant y bash.


He utilizado una herramienta de código abierto basada en la web llamada Hudson y estoy muy contenta con ella. Es muy bueno en la gestión de compilaciones y tiene una excelente integración con SVN y ant. La única advertencia es que necesita alojarlo en su propio servidor.


Muchas empresas utilizan una aplicación de programación de proyectos, como MS Project.

Aquí hay una aplicación de programación de proyectos de código abierto, Open Workbench , que puede ser útil. Tiene limitaciones, pero lo he usado para administrar mis horarios.


Por lo que sé, no hay un sistema único que haga automáticamente todas las tareas que mencione. Necesita escribir algunos scripts y pruebas para automatizar la implementación de su sistema y sus pruebas. Luego puedes usar un servidor CI para armarlo. Esto es lo que sugeriría:

  1. Automatice su proceso de implementación utilizando un lenguaje de scripting apropiado para su plataforma (por ejemplo, Ant, shell scripts, archivos por lotes). Eso incluye las tareas que mencionas:
    • subiendo el binario al servidor de destino
    • tomando una copia de seguridad del sistema
    • enviando un correo electrónico para alertar a los usuarios sobre la actualización
    • realizar la actualización al desactivar el sistema, cambiar un enlace simbólico para que apunte a la nueva versión y volver a iniciarlo.
  2. Escriba algunas pruebas que puedan verificar que el software está funcionando en un entorno particular. Debe poder ejecutar estos en su UAT y el servidor de producción para verificar que el software se haya implementado y se esté ejecutando correctamente.

Una vez que tenga estos elementos automatizados, puede usar un servidor de integración continua para programar estas tareas o realizarlas a pedido. Estoy más familiarizado con Bamboo (trabajo para Atlassian), pero estoy seguro de que CruiseControl y Hudson tienen características similares. Así es como lo harías en bambú:

  1. Cree un nuevo plan de compilación para su implementación de UAT, que ejecute su script de implementación seguido de las pruebas
  2. Decida cómo desea activar la compilación, ya sea por:
    • agregándolo como una dependencia en su compilación principal, de manera que se ejecute automáticamente en una compilación exitosa
    • haz que se ejecute de forma programada para que puedas realizar despliegues nocturnos
    • haga que solo se active manualmente, en cuyo caso simplemente ejecute la compilación cuando desee que se implemente.
  3. Configure los permisos para la compilación de modo que solo los usuarios autorizados puedan implementar versiones en su servidor.

Luego haría lo mismo y configuraría una compilación para su implementación de producción, pero probablemente con solo un disparo manual y con permisos más restrictivos.


Realmente no veo por qué esto no se puede hacer usando Ant ( http://ant.apache.org ) con algunas tareas, una por paso. Dado que la sincronización de estas cosas es manual y cada entorno solo puede tener una copia del software a la vez, no parece haber mucho que hacer sino codificar el flujo de trabajo y dejar que la gente lo haga.


Si logra automatizar sus pruebas (y dependiendo del tipo de software que haga, no hay razón para que no), debería poder usar cualquier software de integración continua.

La cuestión es que cada fase se puede escribir como tareas que se pueden ejecutar una tras otra, dependiendo de cuál fue el resultado del caso anterior.

Por ejemplo, he tenido una configuración de CruiseControl que hace exactamente lo que se describe aquí, la fase de prueba ejecutó un montón de pruebas de unidad (c ++ / qt) y las cosas de uat se escribieron con el controlador de prueba.


Utilizamos a este viejo galés llamado Alistair. Funciona de maravilla.


ThoughtWorks Go parece la parte. Usamos Maven en este momento, pero todavía en una parte de sus capacidades.