Mi è venuta una soluzione semplice per rimuovere i file eliminati e caricare le modifiche su un server FTP remoto come azione di compilazione in Jenkins utilizzando un semplice script mirror lftp. Lftp Manual Page
In breve, si crea un file di configurazione nella directory utente Jenkins ~/.netrc e popolarlo con le credenziali FTP.
machine ftp.remote-host.com
login mySuperSweetUsername
password mySuperSweetPassword
Creare uno script lftp deploy.lftp e rilasciarlo nella root del vostro repo .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
Quindi aggiungere un "Exec Shell" costruire l'azione da eseguire lftp alla sceneggiatura.
lftp -f deploy.lftp
Lo script sarà lftp
- specchio: copiare tutti i file modificati
- inversa: spingere file locali a un host remoto. un normale mirror tira dall'host remoto al locale.
- verbose: dump tutte le note su ciò che i file sono stati copiati dove il log di compilazione
- eliminare: rimuovere i file remoti non sono più presenti nel repository git
- esclude: non pubblicare directory .git o il deploy. script lftp.
- ignore-time: non verrà pubblicato in base al tempo di creazione del file. Se non si dispone di questo, nel mio caso, tutti i file sono stati pubblicati da quando un nuovo clone del repository git ha aggiornato il file creare timestamp. Funziona ancora abbastanza bene e anche i file modificati aggiungendo un singolo spazio sono stati identificati come diversi e caricati.
ricorsione
- : analizzerà ogni file anziché dipendere dalle cartelle per determinare se eventuali file in essi sono stati eventualmente modificati. Questo non è tecnicamente necessario dal momento che stiamo ignorando i timestamp, ma ce l'ho comunque qui.
Ho scritto un articolo che spiega come I keep FTP in sync with Git per un sito WordPress che potevo accedere solo tramite FTP. L'articolo spiega come sincronizzare da FTP a Git, quindi come usare Jenkins per costruire e distribuire di nuovo su FTP. Questo approccio non è perfetto ma funziona. Carica solo i file modificati e cancella i file dall'host che sono stati rimossi dal repository git (e viceversa)
Grazie, probabilmente mi aiuterà con i miei server ssh. Ma come ottenere le informazioni di cui i file hanno bisogno essere spostato/cancellato? Git certamente lo sa, ma come integrarlo nel flusso di lavoro di distribuzione? – 4eyes
Se i file che sei interessato a spostare/eliminare sono già in git, puoi semplicemente clonare il repository sui tuoi server di distribuzione e usare git command line per estrarre le modifiche usando publish su ssh. Questo potrebbe essere un buon modo per andare se si hanno file statici, che non devono essere compilati o controllati, solo bisogno di distribuzione. Probabilmente funzionerebbe meglio se hai repository separati per codice sorgente e file statici. – pushy
Grazie. I nostri progetti sono tutti file "statici" mentre sviluppiamo software basato su php (TYPO3). Sono consapevole che posso ottenere i file spostati/cancellati usando git, in realtà è quello che abbiamo fatto nel nostro semplice sistema di distribuzione basato su phing. Sono semplicemente stupito, che non sembra esserci un plugin che copra l'implementazione ftp/ssh pulita ed efficiente. Mi chiedo in che modo altre aziende implementano i loro progetti web, non usano ftp (s)? O solo l'hosting personalizzato più costoso con ssh e/o git sul server live? – 4eyes