Se me ocurrió una solución simple para eliminar los archivos eliminados y subir los cambios a un servidor FTP remoto como una acción de compilación en Jenkins usando un simple script lftp mirror. Lftp Manual Page
En resumen, se crea un archivo de configuración en el directorio de usuario Jenkins ~/.netrc y rellenarla con sus credenciales FTP.
machine ftp.remote-host.com
login mySuperSweetUsername
password mySuperSweetPassword
Crear una secuencia de comandos lftp deploy.lftp y colocarlo en la raíz de tu repositorio git
set ftp:list-options -a
set cmd:fail-exit true
open ftp.remote-host.com
mirror --reverse --verbose --delete --exclude .git/ --exclude deploy.lftp --ignore-time --recursion=always
A continuación, añadir una "Shell Exec" construir acción a ejecutar lftp en el guión.
lftp -f deploy.lftp
La secuencia de comandos lftp se
- espejo: copiar todos los archivos modificados
- inversa: impulsar los archivos locales a un host remoto. un espejo normal se extrae del host remoto al local.
- detallado: volcar todas las notas acerca de qué archivos se han copiado en el registro de generación
- eliminar: eliminar archivos remotos ya no está presente en el repositorio git
- excluye: no publique directorio .git o el despliegue. script lftp.
- ignore-time: no se publicará en función de la hora de creación del archivo. Si no tiene esto, en mi caso, todos los archivos se publicaron desde que un clon nuevo del repositorio git actualizó el archivo para crear marcas de tiempo. Sin embargo, todavía funciona bastante bien e incluso los archivos modificados añadiendo un solo espacio en ellos se identificaron como diferentes y cargados.
- recursividad: analizará cada archivo en lugar de depender de las carpetas para determinar si los archivos en ellos posiblemente se hayan modificado. Esto no es técnicamente necesario ya que estamos ignorando las marcas de tiempo, pero lo tengo aquí de todos modos.
Escribí un artículo que explica cómo I keep FTP in sync with Git para un sitio de WordPress que solo pude acceder a través de FTP. El artículo explica cómo sincronizar desde FTP a Git y luego cómo usar Jenkins para compilar e implementar nuevamente en FTP. Este enfoque no es perfecto, pero funciona. Solo carga los archivos modificados y borra los archivos del host que se han eliminado del git repo (y viceversa)
Gracias, eso probablemente me ayude con mis servidores ssh. Pero ¿cómo se obtiene la información que los archivos necesitan? para ser movido/eliminado? Git ciertamente lo sabe, pero ¿cómo integrar esto en el flujo de trabajo de implementación? – 4eyes
Si los archivos que está interesado en mover/eliminar ya están en git, puede clonar su repositorio en sus servidores de implementación y usar la línea de comandos de git para extraer los cambios usando publicar sobre ssh. Esta podría ser una buena forma de hacerlo si tiene archivos estáticos, que no necesitan compilarse ni verificarse, solo necesitan implementación. Probablemente funcione mejor si tiene repositorios separados para el código fuente y los archivos estáticos. – pushy
Gracias. Nuestros proyectos son todos archivos "estáticos" a medida que desarrollamos software basado en php (TYPO3). Soy consciente de que puedo obtener los archivos movidos/eliminados usando git, en realidad eso es lo que hemos estado haciendo en nuestro propio sistema simple de implementación basado en phing. Estoy asombrado de que no parezca haber un complemento que cubra una implementación limpia y eficiente de ftp/ssh. Me pregunto cómo otras compañías implementan sus proyectos web, ¿no usan ftp (s)? ¿O simplemente un hosting personalizado más caro con ssh y/o git en el servidor en vivo? – 4eyes