Sind Drush und Phing überflüssig?

24

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

Als ich nachforschte, wie man Jenkins in meinem Drupal-Entwicklungsworkflow verwendet, stieß ich auf einen Beitrag über die Verwendung von Phing mit Drush und Jenkins . Also habe ich mir Phing angeschaut und kann nicht erkennen, was es macht, wenn man Drush-Befehle nicht über ein Shell-Skript verwendet.

Ich versuche zu entscheiden, ob es für mich Sinn macht, die Zeit in das Erlernen des Gebrauchs von Phing zu investieren. Ich bin auf der Suche nach Klarheit darüber, welchen Nutzen die Einbindung von Phing vs. Drush-Befehlen über Shell-Skripte bringt.

Meine Frage ist also an diejenigen, die Phing mit Drush und Jenkins verwenden: Worin unterscheiden sich Drush / Drush-Make und Phing? Warum haben Sie sich entschieden, Phing in Ihrem Prozess zu verwenden?

Vielen Dank

DKinzer
quelle

Antworten:

15

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

Es ist wahr, dass man dasselbe 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 (Ant 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.

Also zum Beispiel. Nehmen wir an, dass ich im Rahmen meines Erstellungsprozesses drush verwende, 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, gibt JenkinsCI an, dass der Build PASSED ist:

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

Offensichtlich stimmt das 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 die daher nicht ordnungsgemäß funktioniert. Das folgende Phing-Build-Skript versucht, das Gleiche 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>

BTW Ameise und Phing sind fast identisch. Der Vorteil für PHP-Entwickler bei der Verwendung von Phing besteht darin, dass sie Phing komfortabler erweitern können.

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

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

DKinzer
quelle
2

Für Phing ist jetzt eine Drush-Aufgabe verfügbar :

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> 
andrewmacpherson
quelle
Ich habe die Drushtask ein wenig benutzt und konnte nicht erfolgreich mit Drush-Warnungen interagieren. Aus diesem Grund und aufgrund der Tatsache, dass ich es in anderer Hinsicht als einschränkend empfand, ließ ich es schließlich fallen.
DKinzer,
Es wäre nett, die Probleme / Grenzen zu erklären, die Sie mit der Drush-Aufgabe in der Support- oder Feature-Anfrage in der Problemwarteschlange hatten ( drupal.org/project/issues/phingdrushtask ). Andere herausfinden und vielleicht Antworten beisteuern lassen.
Pierre Buyle
2

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

Pierre Buyle
quelle
1

Ihre Frage: Überlappen sich Phing und Drush?

TLDR; Version: Sorta. Aber meistens nein.

Die ungekürzte Fassung: Drush und Phing überlappen sich nur in wenigen Fällen. Das Speichern und Archivieren einer Website ist eine der größeren Überschneidungen. Sie könnten es in Phing tun, aber Sie müssten eine Menge Aufgaben schreiben. Sie könnten eine Datenbank sichern, aber drush erledigt dies so einfach mit einem einzigen Befehl. Phing macht das, aber Sie müssen nur ein Befehlszeilenskript schreiben. Wenn Phing glänzt, können Sie Phpunit-Tests ausführen, externe Tools wie ein JAR ausführen, das Ihre CSS-Dateien komprimiert, einen Build Ihrer Drupal-Site / -Anwendung erstellen und verpacken usw.

Was ist Phing?

Phing ist im Wesentlichen der Pilot, der Befehle ausführt. Wenn Sie mit Ant vertraut sind, ist Phing tatsächlich eine enge Verbindung zu Ant (es ist ein Cousin auf Java-Basis). Phing ist in PHP geschrieben.

Sie können Phing verwenden, um Aufgaben zu automatisieren und Ergebnisse basierend auf diesen Aufgaben zu melden. Drush erledigt dagegen nur Aufgaben. Die Ergebnisse der Ausgabe können nicht ermittelt werden.

Anwendungsbeispiel für Phing / Drush:

Ich brauche Drush, um die Datenbank zu entleeren und vom Produkt bis scpzum Test das Paket anzusprechen .

Phing kann diese Einstellungen in einer externen build.propertiesDatei speichern und in Ihrem Projekt speichern . Es ist auch möglich, verschiedene Einstellungen für jede Umgebung zu speichern. Zum Beispiel kann Phing die letzte abgeschlossene Datei, die per "Drush" gelöscht wurde, mit der richtigen Dokumentenwurzel verknüpfen.

Wie funktioniert das alles?

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

Mehr dazu:

Ich kann Ihnen sehr empfehlen, diese SlideShare von den Phing-Projektleitern zu überprüfen:

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

Es gibt Ihnen eine hohe Ebene und einige konkrete Verwendung (plus Code) von Phing. Es hat nichts mit Drupal zu tun, aber es gibt Ihnen eine bessere Vorstellung davon, wie es funktioniert.

chrisjlee
quelle