2009-08-13 5 views
10

Sto utilizzando PHPUnderControl che viene eseguito in cima a Cruise Control per la mia integrazione continua e test delle unità. Ho anche installato per eseguire PHPDocumentor per generare phpdoc per me e gestisce PHP Code Sniffer per far rispettare gli standard di codifica per me. Ma ora voglio installare qualcosa sullo stesso server (Ubuntu) per facilitare la distribuzione su un server remoto. L'ho già configurato in modo tale che, dopo ogni build di successo, l'esportazione SVN viene eseguita dal trunk in una directory all'interno della cartella dei progetti sul server.PHP Build system

Ho pensato di scrivere un piccolo script PHP personalizzato che eseguirà SSH su un server remoto configurato, recupererà l'ultima esportazione, copierà, decadrà ed eseguirà qualsiasi migrazione. Uno script PHP come questo non dovrebbe essere troppo difficile inizialmente, a meno che non sia necessario iniziare a ridimensionarlo su più server. So che ci sono sistemi là fuori come Phing, Fabric e altri.

La mia domanda è se qualcuno ha qualche esperienza con questi e può fornire alcuni pro e contro? Ho iniziato a configurare Phing sul mio server e proveremo a provare Fabric a giocare con loro, ma mi chiedevo se qualcuno che li avesse usati in modo più esteso, o dovessi ridimensionarli, potesse fornire un feedback.

risposta

8

Ho usato Capistrano con PHP (anche se è più una cosa di Rails-y come è scritto in Ruby).

E 'stato davvero semplice da usare, ma detto questo non ho dovuto scalare molto con esso. Tuttavia, la distribuzione viene eseguita su diversi server di staging/produzione e l'estensione multistadio è stata utile in questi scenari.

Tuttavia, come la maggior parte delle cose Ruby, ci sono molti ganci e "magia" che possono creare confusione se sei nuovo a Capistrano e stai cercando di fare qualcosa di difficile con esso.

Per quanto riguarda il confronto con altri strumenti di distribuzione, non posso commentare. So che usavamo Phing, ma non so perché siamo passati a Capistrano.

+0

mi piace Capistrano. +1 –

0

Se dovessi implementare un tale sistema di distribuzione, probabilmente opterei per una soluzione leggermente diversa da quella che hai delineato sopra. Invece di avere un codice che viene eseguito localmente sul mio sistema, si connette a un elenco di server remoti e fa il "lavoro" lì, vorrei impacchettare il modulo di aggiornamento con il resto del codice e farlo estrarre i dati di aggiornamento dal mio server su richiesta (o meglio quando "gli ho detto" di farlo). In questo modo hai molto meno di cui preoccuparti da capo (devi solo servire il codice aggiornato via http quando richiesto, e il server remoto gestisce il resto). Solo i miei 2 centesimi.

1

Utilizziamo phing ed è stato utile. Non lo usiamo per il packaging, ma non dovrebbe essere troppo difficile per farlo fare ciò che stai cercando. Lo utilizziamo principalmente per attività comuni come la cancellazione di cache, la costruzione di siti di sviluppo e altri compiti per aiutare lo sviluppo. È stato di grande aiuto, e da quello che riesco a raccogliere sembra essere un clone di formiche, anche se potrebbe non avere tutte le funzionalità di quella formica.

0

Ho scritto il mio strumento simile a rsync per questo perché lavoro da una pessima connessione internet in un mondo del terzo mondo e ho tutti i tipi di guasti e connessioni affamate in modo che rsync non funzioni.

Sul sistema remoto è necessario scrivere almeno uno script litte che esegue i backup prima di eseguire le migrazioni.

È meglio utilizzare un sistema mirror indipendente totale sul sistema host Web e includere alcuni test unitari piccoli ma fondamentali dopo una migrazione. Quindi fai un passaggio di root per mettere online il sito web aggiornato. Ciò richiederebbe l'esecuzione di alcuni servizi interattivi in ​​modalità di sola lettura durante la migrazione (sfortunatamente una funzionalità che molte persone non implementano).

Ma prima di tutto - pensate se vale davvero la pena farlo - se aggiornate solo un quarto, una semplice checklist su carta sarebbe sufficiente.

2

Se ti piace Capistrano, ma avresti voluto un po 'di più PHP, controlla Fredistrano.

Ho scritto un build automatico (esportazione SVN, codifica Zend Guard, ecc.) E il sistema di distribuzione utilizzando Phing una volta e ho trovato il dolore da usare. Ogni volta che dovevo scrivere un compito speciale, sentivo di dover passare attraverso molti circuiti per farlo funzionare.

Quindi, in questi giorni, scrivo solo semplici script di bash che costruiscono con il checkout SVN, la codifica, la creazione di un tag in SVN e la distribuzione tramite rsync. Potrebbe essere a bassa tecnologia, e Phing potrebbe avere alcune caratteristiche superiori, ma almeno non interferisce con me.

2

Theres è un nuovo strumento di creazione, chiamato Bldr. Usa Yaml per la configurazione, invece di xml come la maggior parte dei sistemi di compilazione là fuori, ed è altamente estendibile.

http://bldr.io