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.
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í.
fuente
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
scp
paquete de prod a testing.Phing puede almacenar estas configuraciones en un
build.properties
archivo 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.
fuente