Drush et Phing sont-ils redondants?

24

J'ai installé JenkinsCI sur notre serveur de développement pour commencer à automatiser notre processus de génération et de test de développement. J'utilise Jenkins avec le plugin Git et certaines commandes Drush via un script shell.

En recherchant comment utiliser Jenkins dans mon flux de travail de développement Drupal, je suis tombé sur un article sur l'utilisation de Phing avec Drush et Jenkins . J'ai donc regardé Phing et je ne vois pas ce qu'il fait qui ne peut pas être fait en utilisant les commandes Drush via un script shell.

J'essaie de décider s'il est logique pour moi d'investir du temps pour apprendre à utiliser Phing. Je recherche une certaine clarté quant aux avantages que j'obtiendrai en incorporant des commandes Phing vs Drush via le script Shell.

Ma question s'adresse donc à ceux qui utilisent Phing avec Drush et Jenkins: en quoi Drush / Drush-Make et Phing diffèrent-ils? Pourquoi avez-vous décidé de commencer à utiliser Phing dans votre processus?

Merci

DKinzer
la source

Réponses:

15

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.

DKinzer
la source
2

Une tâche Drush est maintenant disponible pour Phing :

Au lieu d'utiliser exec, vous pouvez inclure des commandes Drush comme celle-ci ...

  <drush command="site-install" assume="yes"">
        <option name="locale">uk</option>
        <option name="site-name" value="${sitename}" />
        <param>expert</param>
  </drush> 
andrewmacpherson
la source
J'ai utilisé la drushtask pendant un petit moment et je n'ai pas pu interagir avec succès avec les avertissements de drush. J'ai fini par l'abandonner parce que pour cette raison et le fait que je l'ai trouvé limitant à d'autres égards.
DKinzer
Ce serait bien d'expliquer les problèmes / limites que vous aviez avec la tâche Drush dans le support ou la demande de fonctionnalité sur sa file d'attente de problèmes ( drupal.org/project/issues/phingdrushtask ). Laisser les autres découvrir et peut-être apporter des réponses.
Pierre Buyle
2

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.

Pierre Buyle
la source
1

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 scple package de la prod aux tests.

Phing peut stocker ces paramètres dans un build.propertiesfichier 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.

chrisjlee
la source