¿Son redundantes Drush y Phing?

24

He instalado JenkinsCI en nuestro servidor de desarrollo para comenzar a automatizar nuestro proceso de creación y prueba de desarrollo. Estoy usando Jenkins con el complemento de Git y algunos comandos de Drush a través de un script de shell.

Al investigar cómo usar Jenkins en mi flujo de trabajo de desarrollo de Drupal, me encontré con una publicación sobre el uso de Phing con Drush y Jenkins . Así que miré Phing y no puedo ver lo que hace que no se puede hacer mediante el uso de comandos Drush a través de scripts de shell.

Estoy tratando de decidir si tiene sentido invertir el tiempo en aprender a usar Phing. Estoy buscando algo de claridad sobre qué beneficio obtendré al incorporar los comandos Phing vs. Drush a través del script Shell.

Entonces mi pregunta es para aquellos que usan Phing con Drush y Jenkins: ¿en qué se diferencian Drush / Drush-Make y Phing? ¿Por qué decidiste comenzar a usar Phing en tu proceso?

Gracias

DKinzer
fuente

Respuestas:

15

La respuesta es que ciertamente no son redundantes.

Es cierto que uno puede lograr el mismo resultado final utilizando un script bash que incluye comandos drush (al menos la parte de construcción). Pero, si lo que queremos hacer es integrar nuestro proceso en un marco de CI como JenkinsCI, entonces usar algo como phing (ant o capistrano podría ser sustituido aquí) es el camino a seguir.

Con phing podemos dividir el proceso de compilación en distintos segmentos que pueden informar a Jenkins de manera inteligente.

Así por ejemplo. Digamos que como parte de mi proceso de compilación, uso drush para habilitar dos módulos, nodo y debería fallar. Entonces la construcción debería fallar. Pero si todo lo que hacemos es decirle a JenkinsCI que ejecute el siguiente comando de shell, JenkinsCI dirá que la compilación PASÓ:

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

Claramente eso no está bien. Sin embargo, si en su lugar usamos hormiga o phing para definir el mismo proceso, también podemos agregar algo de lógica de falla que Jenkins entiende y, por lo tanto, falla como debería. El siguiente script de compilación de phing intenta hacer lo mismo que el comando anterior, pero falla como esperamos:

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

Por cierto, la hormiga y el phing son casi idénticos. La ventaja para los desarrolladores de PHP en el uso de phing es que pueden extender el phing con mayor comodidad.

En cuanto a que el desarrollo de Drupal y el drush son tan buenos como son, no veo demasiado valor en extender el phing, y creo que ejecutar tareas ejecutivas sería suficiente para crear una plantilla de compilación inteligente.

Bueno, para responder a mi pregunta, terminé invirtiendo el tiempo para resolver el phing. En realidad es bastante intuitivo y no lleva mucho tiempo darse cuenta.

DKinzer
fuente
2

Hay una tarea Drush disponible para Phing ahora:

En lugar de usar exec, puedes incluir comandos de Drush como este ...

  <drush command="site-install" assume="yes"">
        <option name="locale">uk</option>
        <option name="site-name" value="${sitename}" />
        <param>expert</param>
  </drush> 
andrewmacpherson
fuente
Solía ​​usar drushtask por un tiempo y no podía interactuar con éxito con advertencias drush. Terminé soltándolo porque por esa razón y el hecho de que lo encontré limitante en otros aspectos.
DKinzer
Sería bueno explicar los problemas / límites que tuvo con la tarea Drush en soporte o solicitud de función en su cola de problemas ( drupal.org/project/issues/phingdrushtask ). Para permitir que otros lo descubran y tal vez contribuyan con respuestas.
Pierre Buyle
2

Los guiones de phing son reemplazos de los guiones de shell, para controlar la ejecución de múltiples comandos y sus resultados. Drush es una interfaz CLI para comandos para interactuar con un sitio de Drupal o relacionado con Drupal. Se complementan entre sí.

Pierre Buyle
fuente
1

Su pregunta: ¿se superponen Phing y Drush?

TLDR; versión: Sorta. Pero sobre todo no.

La versión íntegra: Drush y phing se superponen solo en unos pocos casos. Principalmente, eliminar y archivar un sitio web sería una de las superposiciones más grandes. Podrías hacerlo en phing pero tendrías que escribir muchas tareas. Puede volcar una base de datos, pero drush lo hace tan fácilmente con un comando. Phing hace eso, pero solo tienes que escribir un script de línea de comando. Donde phing brilla es la capacidad de ejecutar pruebas de phpunit, ejecutar herramientas externas como un archivo jar que comprime sus archivos css, crear y empaquetar una compilación de su sitio / aplicación drupal, etc.

¿Qué es el phing?

Phing es esencialmente el piloto que ejecuta comandos. Si está familiarizado con Ant, Phing es en realidad un puerto cercano a Ant (es primo basado en Java). Phing está escrito en PHP.

Puede usar Phing para automatizar tareas e informar resultados basados ​​en esas tareas. Drush, por otro lado, solo realiza tareas. No se puede determinar evaluar los resultados de la salida.

Ejemplo de caso de uso para phing / drush:

Necesito drush para volcar la base de datos y el phing al scppaquete de prod a testing.

Phing puede almacenar estas configuraciones en un build.propertiesarchivo externo y obtenerlas en su proyecto. También puede almacenar diferentes configuraciones para cada entorno. Por ejemplo, Phing puede hacer un enlace simbólico del último completado que ha sido volcado por drush a la raíz del documento correcto.

¿Cómo funciona todo esto?

Phing es impulsado por un xml. Consume un archivo build.xml y toma atributos (a veces llamados objetivos) y ejecuta comandos simples.

Más sobre esto:

Le recomiendo que revise esta diapositiva compartida por los líderes del proyecto Phing:

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

Le dará un alto nivel y un uso concreto (más código) de phing. No está relacionado de ninguna manera con drupal, pero le dará una mejor idea de cómo funciona.

chrisjlee
fuente