La réponse est qu'ils ne sont certainement pas redondants.
Il est vrai que l'on peut obtenir le même résultat final en utilisant un script bash qui inclut des commandes drush (au moins la partie construction). Mais, si ce que nous cherchons à faire est d'intégrer notre processus dans un framework CI comme JenkinsCI, alors utiliser quelque chose comme le phing (fourmi ou capistrano pourrait être substitué ici) est la voie à suivre.
Avec le phing, nous pouvons diviser le processus de construction en segments distincts qui peuvent faire rapport à Jenkins de manière intelligente.
Ainsi par exemple. Disons que dans le cadre de mon processus de construction, j'utilise drush pour activer deux modules, node et shouldfail. Ensuite, la construction devrait échouer. Mais si tout ce que nous faisons est de dire à JenkinsCI d'exécuter la commande shell suivante, JenkinsCI dira que la construction a réussi:
drush --quiet --yes @staging en node shouldfail
De toute évidence, ce n'est pas vrai. Cependant, si à la place nous utilisons ant ou phing pour définir le même processus, nous pouvons également ajouter une logique de défaillance que Jenkins comprend, et donc échouer comme il se doit. Le script de génération de phing suivant essaie de faire la même chose que l'ancienne commande, mais échoue comme nous nous y attendons:
<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 ant et phing sont presque identiques. L'avantage pour les développeurs PHP d'utiliser le phing est qu'ils peuvent étendre plus facilement le phing.
En ce qui concerne le développement et le drush de Drupal, je ne vois pas trop d'intérêt à étendre le phing, et je pense que l'exécution de tâches d'exécution suffirait à créer un modèle de build intelligent.
Eh bien, afin de répondre à ma question, j'ai fini par investir du temps pour comprendre le phing. C'est en fait assez intuitif et cela ne prend pas trop de temps à comprendre.
Les scripts Phing remplacent les scripts shell, pour contrôler l'exécution de plusieurs commandes et leurs résultats. Drush est une interface CLI pour les commandes permettant d'interagir avec un site Drupal ou lié à Drupal. Ils se complètent.
la source
Votre question: Phing et Drush se chevauchent-ils?
TLDR; version: Sorta. Mais surtout non.
La version intégrale: Drush et phing ne se chevauchent que dans quelques cas. Surtout, le dumping et l'archivage d'un site Web constitueraient l'un des chevauchements les plus importants. Vous pouvez le faire en phing mais vous devrez écrire beaucoup de tâches. Vous pouvez vider une base de données mais drush le fait si facilement avec une seule commande. Phing le fait mais il vous suffit d'écrire un script de ligne de commande. Où le phing brille, c'est la possibilité d'exécuter des tests de phpunit, d'exécuter des outils externes comme un bocal qui compresse vos fichiers css, de créer et de compiler une build de votre site / application drupal, etc.
Qu'est-ce que le phing?
Phing est essentiellement le pilote qui exécute les commandes. Si vous connaissez Ant, Phing est en fait un port proche de Ant (c'est un cousin basé sur Java). Phing est écrit en PHP.
Vous pouvez utiliser Phing pour automatiser les tâches et rapporter les résultats en fonction de ces tâches. Drush, d'autre part, effectue simplement des tâches. Il est incapable de déterminer évaluer les résultats de la sortie.
Exemple d'utilisation pour le phing / drush:
J'ai besoin de drush pour vider la base de données et le phing dans
scp
le package de la prod aux tests.Phing peut stocker ces paramètres dans un
build.properties
fichier externe et les source dans votre projet. Il est également capable de stocker différents paramètres pour chaque environnement. Par exemple, Phing peut créer un lien symbolique vers le dernier document terminé qui a été vidé par drush.Comment ça marche?
Phing est piloté par un xml. Il consomme un fichier build.xml et prend des attributs (parfois appelés cibles) et exécute des commandes simples.
Plus à ce sujet:
Je vous recommande fortement de revoir ce partage de diapositives par les chefs de projet Phing:
http://www.slideshare.net/michieltcs/building-and-deploying-php-applications-with-phing
Cela vous donnera un niveau élevé et une utilisation concrète (plus du code) du phing. Ce n'est en aucun cas lié à Drupal, mais cela vous donnera une meilleure idée de son fonctionnement.
la source