it-swarm.com.de

Sind Drush und Phing überflüssig?

Ich habe JenkinsCI auf unserem Entwicklungsserver installiert, um den Entwicklungs- und Testprozess für Entwickler zu automatisieren. Ich verwende Jenkins mit dem Git-Plugin und einigen Drush-Befehlen über ein Shell-Skript.

Bei der Untersuchung der Verwendung von Jenkins in meinem Drupal dev-Workflow) stieß ich auf einen Beitrag über die Verwendung von Phing mit Drush und Jenkins . Also habe ich mir Phing angesehen und kann ' t sehen, was es tut, was nicht mit Drush-Befehlen über ein Shell-Skript getan werden kann.

Ich versuche zu entscheiden, ob es für mich sinnvoll ist, die Zeit in das Erlernen des Gebrauchs von Phing zu investieren. Ich bin auf der Suche nach Klarheit darüber, welchen Nutzen ich durch die Integration von Phing vs. Drush-Befehlen über ein Shell-Skript erzielen kann.

Meine Frage ist also für diejenigen, die Phing mit Drush und Jenkins verwenden: Wie unterscheiden sich Drush/Drush-Make und Phing? Warum haben Sie sich entschieden, Phing in Ihrem Prozess einzusetzen?

Vielen Dank

23
DKinzer

Die Antwort ist, dass sie sicherlich nicht überflüssig sind.

Es ist wahr, dass man das gleiche Endergebnis mit einem Bash-Skript erzielen kann, das Drush-Befehle enthält (zumindest den Gebäudeteil). Wenn wir jedoch unseren Prozess in ein CI-Framework wie JenkinsCI integrieren möchten, ist die Verwendung von Phing (Ameise oder Capistrano könnte hier ersetzt werden) der richtige Weg.

Mit Phing können wir den Build-Prozess in verschiedene Segmente aufteilen, die auf intelligente Weise an Jenkins zurückmelden können.

So zum Beispiel. Angenommen, ich verwende Drush als Teil meines Erstellungsprozesses, um zwei Module zu aktivieren, Node und Shouldfail. Dann sollte der Build fehlschlagen. Wenn wir JenkinsCI jedoch nur anweisen, den folgenden Shell-Befehl auszuführen, sagt JenkinsCI, dass der Build PASSED:

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

Das stimmt natürlich nicht. Wenn wir jedoch stattdessen ant oder phing verwenden, um denselben Prozess zu definieren, können wir auch eine Fehlerlogik hinzufügen, die Jenkins versteht, und daher fehlschlagen, wie es sollte. Das folgende Phing-Build-Skript versucht, dasselbe wie der vorherige Befehl zu tun, schlägt jedoch fehl, wie wir es erwarten:

<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>

Übrigens sind Ameise und Phing fast identisch. Der Vorteil für PHP Entwickler bei der Verwendung von Phing ist, dass sie Phing bequemer erweitern können.

Was Drupal Entwicklung und Drush so gut wie es ist, angeht, sehe ich keinen allzu großen Wert darin, Phing zu erweitern, und denke, dass das Ausführen von Exec-Tasks ausreichen würde, um eine intelligente Build-Vorlage zu erstellen.

Um meine Frage zu beantworten, habe ich mir die Zeit genommen, um Phing herauszufinden. Es ist eigentlich ziemlich intuitiv und es dauert nicht zu lange, um es herauszufinden.

16
DKinzer

Phing-Skripte ersetzen Shell-Skripte, um die Ausführung mehrerer Befehle und deren Ergebnisse zu steuern. Drush ist eine CLI-Schnittstelle für Befehle zur Interaktion mit einer Drupal -Site oder mit Drupal verwandt. Sie ergänzen sich.

2
Pierre Buyle

Es gibt eine Drush-Aufgabe für Phing verfügbar jetzt:

Anstatt exec zu verwenden, können Sie Drush-Befehle wie diesen einfügen ...

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

Ihre Frage: Überlappen sich Phing und Drush?

TLDR; version : Sorta. Aber meistens nein.

Die ungekürzte Version : Drush und Phing überlappen sich nur in wenigen Fällen. Das Dumping und Archivieren einer Website wäre hauptsächlich eine der größeren Überschneidungen. Sie könnten es in Phing tun, aber Sie müssten viele Aufgaben schreiben. Sie könnten eine Datenbank sichern, aber drush macht es so einfach mit einem Befehl. Phing macht das, aber Sie müssen nur ein Befehlszeilenskript schreiben. Wo Phing glänzt, ist die Möglichkeit, Phpunit-Tests auszuführen, externe Tools wie ein JAR auszuführen, das Ihre CSS-Dateien komprimiert, einen Build Ihrer drupal Site/Anwendung usw.) zu erstellen und zu verpacken.

Was ist Phing?

Phing ist im Wesentlichen der Pilot, der Befehle ausführt. Wenn Sie mit Ant vertraut sind, ist Phing tatsächlich ein enger Port von Ant (es ist Java-basierter Cousin). Phing ist in PHP geschrieben.

Mit Phing können Sie Aufgaben automatisieren und Ergebnisse basierend auf diesen Aufgaben melden. Drush hingegen führt nur Aufgaben aus. Es ist nicht möglich, die Ergebnisse der Ausgabe auszuwerten.

Beispiel für einen Anwendungsfall für Phing/Drush:

Ich brauche Drush, um die Datenbank zu sichern und Phing zu scp dem Paket von Prod bis Test.

Phing kann diese Einstellungen in einem externen build.properties Datei und Quelle sie in Ihr Projekt. Es können auch unterschiedliche Einstellungen für jede Umgebung gespeichert werden. Z.B. Phing kann den letzten abgeschlossenen Vorgang, der per Drush ausgegeben wurde, mit dem richtigen Dokumentenstamm verknüpfen.

Wie funktioniert das alles?

Phing wird von einer XML gesteuert. Es verwendet eine build.xml-Datei, nimmt Attribute (manchmal auch als Ziele bezeichnet) auf und führt einfache Befehle aus.

Mehr dazu:

Ich empfehle Ihnen dringend, diese Diashow von den Phing-Projektleitern zu überprüfen:

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

Es gibt Ihnen ein hohes Niveau und eine konkrete Verwendung (plus Code) von Phing. Es hat nichts mit drupal zu tun, aber es gibt Ihnen eine bessere Vorstellung davon, wie es funktioniert.

1
chrisjlee