web-dev-qa-db-fra.com

Drush et Phing sont-ils redondants?

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 Drupal dev workflow, je suis tombé sur un article sur l'utilisation de Phing avec Drush et Jenkins . J'ai donc regardé Phing et je peux '' t voir 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

23
DKinzer

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 de PHP en utilisant le phing est qu'ils peuvent étendre le phing plus facilement.

Quant à Drupal étant aussi bons qu'ils le sont, 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 construction 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.

16
DKinzer

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.

2
Pierre Buyle

Il y a tâche Drush disponible pour Phing maintenant:

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

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 suffit d'écrire un script de ligne de commande. Là 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 version de votre drupal site/application, etc.

Qu'est-ce que le phing?

Phing est essentiellement le pilote qui exécute les commandes. Si vous êtes familier avec Ant, Phing est en fait un port proche de Ant (c'est 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 d'é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 phing vers scp le paquet de prod à testing.

Phing peut stocker ces paramètres dans un fichier externe build.properties 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 tout cela fonctionne-t-il?

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.

1
chrisjlee