2008-10-13 11 views
17

Tengo un número de procesos por lotes que se ejecutan detrás de escena para un sitio web Linux/PHP. Están empezando a crecer en número y complejidad, por lo que quiero aplicarles una pequeña cantidad de proceso.¿Mejores prácticas para implementar herramientas y scripts en la producción?

Mi árbol fuente tiene un montón de archivos cpp y scripts, organizados con desarrollo pero sin implementación en mente. Después de compilar todos los archivos ejecutables, necesito poner varios scripts y binarios en un grupo de máquinas. Diferentes máquinas necesitan diferentes ejecutables, scripts y archivos de configuración para sus procesos por lotes. También tengo algunas de las herramientas que he escrito que pertenecen a cada máquina. Por el momento, este proceso de implementación es manual y propenso a errores.

Supongo que voy a terminar con una secuencia de comandos que se ejecuta en la raíz del árbol fuente y crea un árbol más pequeño de todo lo necesario para cualquiera de las máquinas. Entonces, simplemente sincronizaré eso con las máquinas apropiadas. Pero tengo curiosidad de cómo otras personas están manejando este tipo de problema. ¿Algunas ideas?

+0

Wow 7 años después ... Ahora hay un montón de herramientas, específicamente herramientas de automatización de lanzamiento de aplicaciones. Aquí hay un gran recurso de inicio para obtener más información: https://en.wikipedia.org/wiki/Application_release_automation –

Respuesta

2

Cree sus propios paquetes en el formato que usa su distribución, p. Paquetes de Debian (.deb). Estos pueden copiarse en cada máquina e instalarse manualmente, o puede configurar su propio repositorio y agregarlo a su lista de fuentes.

Sus paquetes deben configurarse para que los scripts que contienen consulten un archivo de configuración, que es diferente en cada host, dependiendo de qué scripts necesitan ejecutarse en cada uno.

Para unir todo, puede crear un meta paquete que solo depende de cada uno de los otros paquetes que cree. De esta forma, cuando configura un nuevo servidor, instala ese meta paquete y los otros paquetes se envían como dependencias.

Aunque este proceso suena un poco complicado, si tiene muchas secuencias de comandos y muchos hosts para implementarlos, realmente puede pagar a largo plazo.

1

Tengo que implementar scripts PHP y configuraciones de Apache para varios clientes de manera frecuente. Como todos ejecutan Debian Linux, he configurado un repositorio de paquetes Debian en mi servidor y todo lo que el cliente tiene que hacer es escribir apt-get upgrade y obtienen la última versión.

3

Eche un vistazo a cfengine tutorial para ver si cfengine se ve como la herramienta adecuada para su situación. Puede ser un poco complicado para un sitio web pequeño, pero si va a incluir más computadoras y más configuración en el futuro, en algún momento terminará usando cfengine o algo así.

0

Lo primero que debe hacer es obtener todos estos scripts en un repositorio de control de origen (svn o git son buenos) para que pueda rastrear los cambios en estos scripts a lo largo del tiempo.

Si está interesado en ruby, consulte Capistrano, es muy adecuado para implementar cosas en varias máquinas en un clúster, y es bastante fácil de configurar. Puede leer archivos directamente desde su sistema de control de versiones.

1

Puppet es otra herramienta que se puede utilizar en esta situación. Es similar a cfengine: crea un modelo de la implementación deseada y Puppet calcula cómo lograr que el entorno vuelva a este estado.

19

Aquí hay varias categorías de herramienta. Algunas personas usan una combinación de herramientas de estas categorías. A veces uso, por ejemplo, tanto Puppet como Capistrano. Ver Puppet or Capistrano - Use the Right Tool for the Job para una discusión.

Herramientas de scripting destinadas a implementar una aplicación:

El patrón general con las herramientas de esta categoría es que se crea una secuencia de comandos y/o el archivo de configuración, a menudo con conjuntos de comandos similares a un Makefile, y el la herramienta irá a su caja de producción, hará un checkout de su fuente y ejecutará cualquier otro paso que sea necesario.

Las herramientas en esta área generalmente tienen instalaciones para retroceder a una versión anterior. Por lo tanto, verifican su fuente a releases/directorio y crean un enlace simbólico de "actual" a "releases /" si todo va bien. Si hay un problema, puede volver a la versión anterior ejecutando un comando que eliminará "actual" y lo vinculará a las versiones/directorio anteriores.

  • Capistrano viene de la comunidad de Rails pero es de uso general. Los usuarios de Capistrano pueden estar interesados ​​en deprec, un conjunto de recetas de implementación para Capistrano.
  • Vlad the Deployer es una alternativa a Capistrano, nuevamente de la comunidad de Rails.
  • Escriba su propio script de shell o Makefile.

opciones para llegar a los archivos en el cuadro de la producción:

  • pago y envío directo de la fuente. No siempre es posible si sus cajas de producción carecen de herramientas de desarrollo, específicamente herramientas de administración de código fuente.
  • Verifique la fuente localmente, luego arréglelo. Use scp o rsync para copiar el archivo tar. Esto a veces se prefiere para algo como una implementación de Amazon EC2, donde un tarball comprimido puede ahorrar tiempo/ancho de banda.
  • Verifique la fuente localmente, luego rsyncírela a la caja de producción.

Herramientas de embalaje

Use sistema de paquetes de su sistema operativo para generar paquetes que contienen los archivos para su aplicación. Cree un paquete maestro que tenga como dependencias los otros paquetes que necesita. El sistema RubyWorks es un ejemplo de esto, utilizado para implementar una pila de Rails y una aplicación de muestra. Luego, se trata de usar apt, yum/rpm, Windows msi o lo que sea para implementar una versión determinada. La reversión implica la desinstalación y reinstalación de una versión anterior.

Herramientas generales destinadas a la instalación de aplicaciones/configs y mantenimiento de un conjunto de sistemas

Estas herramientas no se dirigen específicamente al problema de la implementación de una aplicación web, sino más bien el problema más general de la implementación/mantenimiento de Aplicaciones/Configura para un conjunto de servidores o estaciones de trabajo de una compañía completa. Están destinados más al administrador del sistema que al desarrollador web, aunque pueden ser útiles.

  • Cfengine es una herramienta en esta categoría.
  • Puppet tiene como objetivo mejorar Cfengine. Tiene una curva de aprendizaje, pero muchos encuentran que vale la pena el tiempo para descubrir cómo hacer las configuraciones. Una vez que lo tienes listo, cada casilla revisa periódicamente el servidor central y se asegura de que todo esté actualizado. Si alguien edita un archivo o cambia un permiso, esto se detecta y se corrige.Por lo tanto, a diferencia de las herramientas de implementación anteriores, Puppet no solo coloca los archivos en el lugar correcto para usted, sino que asegura que se mantengan de esa manera.
  • Chef es un poco más joven que Puppet con un enfoque similar.
  • Smartfrog es otra herramienta en esta categoría.
  • Ansible trabaja con archivos YAML simple y no requiere de agentes que se ejecutan en los servidores que gestiona

Para una comparación de estas y muchas otras herramientas en esta categoría, ver el artículo de Wikipedia, Comparison of open source configuration management software.

+0

Gran respuesta, informativa y bien escrita. Solo una nota: han pasado años y ahora Puppet también Windows. – Luke404

Cuestiones relacionadas