Drush e Phing sono ridondanti?


24

Ho installato JenkinsCI sul nostro server di sviluppo per iniziare ad automatizzare il nostro processo di sviluppo e test di sviluppo. Sto usando Jenkins con Git Plugin e alcuni comandi Drush tramite uno script di shell.

Durante la ricerca su come usare Jenkins nel mio flusso di lavoro per sviluppatori Drupal, mi sono imbattuto in un post sull'uso di Phing con Drush e Jenkins . Quindi ho guardato Phing e non riesco a vedere cosa fa che non può essere fatto usando i comandi Drush tramite script di shell.

Sto cercando di decidere se per me ha senso investire tempo nell'imparare ad usare Phing. Sto cercando un po 'di chiarezza su quale beneficio otterrò incorporando i comandi Phing vs. Drush tramite lo script Shell.

Quindi la mia domanda è per coloro che usano Phing con Drush e Jenkins: in che cosa differiscono Drush / Drush-Make e Phing? Perché hai deciso di iniziare a utilizzare Phing nel tuo processo?

Grazie

Risposte:


15

La risposta è che non sono certamente ridondanti.

È vero che si può ottenere lo stesso risultato finale usando uno script bash che include comandi drush (almeno la parte di costruzione). Ma se quello che stiamo cercando di fare è integrare il nostro processo in un framework CI come JenkinsCI, allora usare qualcosa come phing (formica o capistrano potrebbe essere sostituito qui) è la strada da percorrere.

Con phing possiamo suddividere il processo di generazione in segmenti distinti che possono riferire a Jenkins in modo intelligente.

Quindi per esempio. Dì che come parte del mio processo di compilazione uso drush per abilitare due moduli, node e shouldfail. Quindi la compilazione dovrebbe fallire. Ma se tutto ciò che facciamo è dire a JenkinsCI di eseguire il seguente comando di shell, JenkinsCI dirà che la build è PASSATA:

drush --quiet --yes @staging en node shouldfail

Chiaramente non è giusto. Tuttavia, se invece utilizziamo ant o phing per definire lo stesso processo, possiamo anche aggiungere qualche logica di fallimento che Jenkins capisce e quindi fallire come dovrebbe. Il seguente script di phing build tenta di fare la stessa cosa del comando precedente, ma fallisce come ci aspettiamo che:

<project name="staging" default="enable modules" description="Jenkins Staging Build">

    <target name="enable modules">
      <exec  command="drush --quiet --yes @staging en node shouldfail" error='error' checkreturn="true">
      </exec>
      <loadfile  property="en.error" file="error" />
      <if>
        <contains string="${en.error}" substring="warning" />
        <then>
          <property name="en.fail" value="Could not enable all modules" />
        </then>
      </if>
      <fail if="en.fail" message="${en.fail}" />
    </target>

</project>

La formica BTW e il phing sono quasi identici. Il vantaggio per gli sviluppatori PHP nell'uso del phing è che possono estendere più comodamente il phing.

Per quanto riguarda lo sviluppo di Drupal e il drush, per quanto sia buono, non vedo troppo valore nell'estensione del phing e penso che l'esecuzione di task exec sarebbe sufficiente per creare un modello di build intelligente.

Bene, per rispondere alla mia domanda ho finito per investire il tempo per capire phing. In realtà è piuttosto intuitivo e non ci vuole troppo tempo per capire.


2

C'è un compito Drush disponibile per Phing ora:

Invece di usare exec puoi includere i comandi Drush come questo ...

  <drush command="site-install" assume="yes"">
        <option name="locale">uk</option>
        <option name="site-name" value="${sitename}" />
        <param>expert</param>
  </drush> 

Ho usato un po 'il drushtask e non sono riuscito a interagire con gli avvisi di Drush. Ho finito per lasciarlo perché per quel motivo e per il fatto che l'ho trovato limitante sotto altri aspetti.
DKinzer,

Sarebbe bello spiegare i problemi / i limiti che hai avuto con l'attività Drush nel supporto o nella richiesta di funzionalità nella sua coda dei problemi ( drupal.org/project/issues/phingdrushtask ). Far scoprire agli altri e forse contribuire con le risposte.
Pierre Buyle,

2

Gli script di phing sono sostituti degli script di shell, per controllare l'esecuzione di più comandi e i loro risultati. Drush è un'interfaccia CLI per i comandi per interagire con un sito Drupal o relativi a Drupal. Si completano a vicenda.


1

La tua domanda: Phing e Drush si sovrappongono?

TLDR; versione: Sorta. Ma soprattutto no.

La versione integrale: Drush e phing si sovrappongono in pochi casi. Principalmente, il dumping e l'archiviazione di un sito Web sarebbe una delle più grandi sovrapposizioni. Potresti farlo in phing ma dovresti scrivere un sacco di compiti. Potresti scaricare un database ma drush lo fa così facilmente con un solo comando. Phing lo fa ma devi solo scrivere uno script da riga di comando. Dove phing brilla è la possibilità di eseguire test phpunit, eseguire strumenti esterni come un vaso che comprime i file CSS, creare e creare un pacchetto di un sito / applicazione drupal, ecc.

Cos'è il phing?

Phing è essenzialmente il pilota che esegue i comandi. Se hai familiarità con Ant, Phing è in realtà un porto vicino da Ant (è cugino basato su Java). Phing è scritto in PHP.

È possibile utilizzare Phing per automatizzare le attività e riportare i risultati in base a tali attività. Drush, d'altra parte, svolge solo compiti. Non è in grado di determinare valutare i risultati dell'output.

Esempio di caso d'uso per phing / drush:

Ho bisogno di Drush per scaricare il database e phing scpsul pacchetto dal prod al testing.

Phing può archiviare queste impostazioni in un build.propertiesfile esterno e sorgente nel tuo progetto. È anche in grado di memorizzare impostazioni diverse per ogni ambiente. Ad esempio, Phing può collegare in modo simbolico l'ultimo completato scaricato da drush alla radice del documento corretta.

Come funziona tutto questo?

Phing è guidato da un xml. Consuma un file build.xml e accetta gli attributi (a volte chiamati target) ed esegue semplici comandi.

Maggiori informazioni su questo:

Consiglio vivamente di rivedere questa presentazione dai leader del progetto Phing:

http://www.slideshare.net/michieltcs/building-and-deploying-php-applications-with-phing

Ti darà un alto livello e un uso concreto (più codice) di phing. Non è in alcun modo correlato a Drupal ma ti darà un'idea migliore di come funziona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.