Sincronizar / implementar scripts en varios sistemas

0

Tengo algunas tareas que requieren mucho tiempo y me gusta distribuirlas en varias computadoras. Estas tareas requieren ejecutar un script idéntico de ruby ​​o python (o una serie de scripts que se llaman entre sí) en cada máquina. Las máquinas tendrán un archivo de configuración separado que le indicará al script qué parte de la tarea completar.

Quiero encontrar la mejor manera de sincronizar los scripts en estas máquinas antes de ejecutarlos. Hasta ahora, he estado haciendo cambios en una copia del script en un recurso compartido de red y luego copiando una copia nueva en cada máquina cuando quiero ejecutarla. Pero esto es engorroso y deja una posibilidad de error (por ejemplo, falta un archivo en la copia o no hace clic en "copiar y reemplazar").

Supongamos que los sistemas son máquinas estándar de Windows que no están dedicadas a esta tarea y no necesito ejecutar estos scripts todo el tiempo (por lo que no quiero una solución que funcione las 24 horas del día, los 7 días de la semana y que siempre los mantenga actualizados, Prefiero algo que empuja / tira del comando).

Mis pensamientos sobre varias opciones:

  • Adaptación simple de mi flujo de trabajo actual: mantenga los originales en la unidad de red, pero escriba un archivo por lotes que copie sobre la última versión de los scripts para que todo sea una operación de un solo clic. Requiere acción en cada sistema, pero ese no es el fin del mundo (ya que cada uno generalmente necesita que su archivo de configuración cambie también ligeramente).
  • Ponga todo en un repositorio Mercurial / Git y extraiga una copia nueva en cada nodo. Ir directamente al repositorio desde cada máquina garantizaría una versión actual (y tendría el beneficio adicional de permitir que se realicen ediciones en el script desde cualquier máquina). Las desventajas serían que requiere que se instale VCS en cada máquina y puede haber algunos problemas relacionados con la autenticación, ya que no usaría un repositorio público.
  • Abra el acceso de escritura en una carpeta compartida y escriba un script para usar rsync (o similar) para enviar los cambios a todas las máquinas a la vez. Esto obtiene una versión actual en cada máquina (aunque tendría que cambiar la secuencia de comandos si desea omitir una máquina o agregar una nueva). El posible problema sería que cada computadora tiene que permitir el acceso de escritura.
  • Dropbox es una sugerencia razonable (y podría funcionar bien), pero no quiero usar un servicio externo y prefiero no tener Dropbox ejecutándose las 24 horas, los 7 días de la semana, en sistemas que normalmente no lo necesitarían.

¿Hay algo simple que me estoy perdiendo? ¿Alguna herramienta diseñada expresamente para hacer este tipo de cosas? De lo contrario, me inclino a vincular todos los sistemas a Mercurial ya que, si bien requiere software adicional, es un poco más robusto que escribir un archivo por lotes (por ejemplo, si divido parte de un script en un módulo separado, Mercurial sabrá qué hacer mientras que tendría que agregar una línea al archivo por lotes).

orh
fuente

Respuestas:

1

Yo uso Jenkins (CI Server) y Capistrano 2 (Ruby build / deploy). No necesariamente necesita Jenkins para esto, pero un servidor CI es ideal para este tipo de trabajo. Capistrano es genial porque puedo hacer una cosa / muchas máquinas fácilmente y puedo manejar la extracción desde el SCM (git o mercurial como usted pidió) si lo desea. Fabric (Python) también es un buen marco de "implementación".

Flujo de trabajo:

  • Capistrano revisa una secuencia de comandos git branch / master que contiene en la máquina local
  • Capistrano envía el archivo de script a todas las máquinas a través de scp o sftp. (: deploy_via,: copy)
  • Capistrano ejecuta la secuencia de comandos en todos los nodos de "aplicación", en paralelo o secuencialmente, e informa de éxito o falla.

Puede sustituir Capistrano con (Tela | bash | Chrome | receta del chef | configuración de marionetas)

Ahora, si tiene un servidor CI en juego, puede administrar las claves SSH y la administración desde un punto central.

Puedo suponer con seguridad que está utilizando Windows para el desarrollo local, si estas también son máquinas Windows en las que está implementando ... es posible que desee considerar los comandos Powershell ejecutados desde Capistrano en lugar de la forma "unix" que describí aquí. El desafío es cómo X inicia sesión en la casilla Y y realiza Z, una pregunta diferente.

Electrawn
fuente
0

Solo tenga un script de "cargador" inicial que tome la última versión de todo de la red. Almacene los datos de configuración fuera de este árbol (que debería estar haciendo de todos modos). El cargador puede ser desde un simple archivo por lotes que llama xcopy / robocopy hasta un DVCS pull o DropBox / OwnCloud sync.

De esta manera, no importa cómo se ejecute, la primera acción será actualizar a la última antes de la ejecución.

afrazier
fuente