Drush e Phing são redundantes?

24

Instalei o JenkinsCI em nosso servidor de desenvolvimento para começar a automatizar nosso processo de criação e teste de desenvolvimento. Estou usando o Jenkins com o plug-in Git e alguns comandos Drush por meio de um script de shell.

Ao pesquisar como usar o Jenkins no meu fluxo de trabalho do Drupal, deparei-me com um post sobre o uso do Phing com Drush e Jenkins . Então, olhei para Phing e não consigo ver o que faz que não pode ser feito usando os comandos Drush por meio de scripts de shell.

Estou tentando decidir se faz sentido investir tempo em aprender a usar o Phing. Estou procurando alguma clareza sobre qual benefício obterei ao incorporar comandos Phing vs. Drush via script do Shell.

Portanto, minha pergunta é para quem usa Phing com Drush e Jenkins: como é que Drush / Drush-Make e Phing diferem? Por que você decidiu começar a usar o Phing em seu processo?

obrigado

DKinzer
fonte

Respostas:

15

A resposta é que eles certamente não são redundantes.

É verdade que é possível obter o mesmo resultado final usando um script bash que inclui comandos drush (pelo menos a parte da construção). Mas, se o que pretendemos fazer é integrar nosso processo a uma estrutura de IC como o JenkinsCI, usar algo como phing (formiga ou capistrano pode ser substituído aqui) é o caminho a seguir.

Com o phing, podemos dividir o processo de criação em segmentos distintos, que podem ser reportados ao Jenkins de maneira inteligente.

Então, por exemplo. Digamos que, como parte do meu processo de construção, eu use o drush para habilitar dois módulos, node e shouldfail. Então a construção falhará. Mas se tudo o que fazemos é dizer ao JenkinsCI para executar o seguinte comando do shell, o JenkinsCI dirá que a compilação PASSEU:

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

Claramente isso não está certo. No entanto, se usarmos ant ou phing para definir o mesmo processo, também podemos adicionar alguma lógica de falha que Jenkins entende e, portanto, falha como deveria. O script de construção de phing a seguir tenta fazer a mesma coisa que o comando anterior, mas falha 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>

Entre formiga e phing são quase idênticos. A vantagem para desenvolvedores de PHP no uso de phing é que eles podem estender o phing de maneira mais confortável.

Quanto ao desenvolvimento e drush do Drupal serem tão bons quanto são, não vejo muito valor em estender o phing e acho que a execução de tarefas exec seria suficiente para criar um modelo de construção inteligente.

Bem, para responder à minha pergunta, acabei investindo tempo para descobrir phing. Na verdade, é bastante intuitivo e não demora muito para descobrir.

DKinzer
fonte
2

Há uma tarefa Drush disponível para Phing agora:

Em vez de usar exec, você pode incluir comandos 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
fonte
Eu usei o drushtask por um tempo e não consegui interagir com êxito com avisos de drush. Acabei desistindo porque, por esse motivo e pelo fato de achar limitante em outros aspectos.
DKinzer
Seria bom explicar os problemas / limites que você teve com a tarefa Drush no suporte ou solicitação de recursos em sua fila de problemas ( drupal.org/project/issues/phingdrushtask ). Para permitir que outras pessoas descubram e talvez contribuam com respostas.
Pierre Buyle 28/02
2

Os scripts phing são substitutos dos scripts shell, para controlar a execução de vários comandos e seus resultados. Drush é uma interface CLI para comandos para interagir com um site Drupal ou relacionado ao Drupal. Eles se complementam.

Pierre Buyle
fonte
1

Sua pergunta: Phing e Drush se sobrepõem?

TLDR; versão: Sorta. Mas principalmente não.

A versão completa: Drush e phing se sobrepõem em apenas algumas instâncias. Principalmente, despejar e arquivar um site seria uma das maiores sobreposições. Você poderia fazer isso no phing, mas teria que escrever muitas tarefas. Você pode despejar um banco de dados, mas o drush o faz tão facilmente com um comando. Phing faz isso, mas você só precisa escrever um script de linha de comando. Onde o phing brilha é a capacidade de executar testes de phpunit, executar ferramentas externas como um jar que comprime seus arquivos css, criar e empacotar uma compilação de seu site / aplicativo drupal, etc.

O que é phing?

Phing é essencialmente o piloto que executa comandos. Se você está familiarizado com o Ant, Phing é na verdade uma porta próxima do Ant (é primo baseado em java). Phing é escrito em PHP.

Você pode usar o Phing para automatizar tarefas e relatar resultados com base nessas tarefas. Drush, por outro lado, apenas executa tarefas. Não é possível determinar a avaliação dos resultados da saída.

Exemplo de caso de uso para phing / drush:

Eu preciso drush para despejar o banco de dados e phing para scpo pacote de prod para testes.

Phing pode armazenar essas configurações em um build.propertiesarquivo externo e originá-las em seu projeto. Também é capaz de armazenar configurações diferentes para cada ambiente. Por exemplo, o Phing pode vincular novamente a última conclusão que foi descartada por drush à raiz do documento correta.

Como tudo isso funciona?

Phing é conduzido por um xml. Consome um arquivo build.xml e recebe atributos (às vezes chamados de destinos) e executa comandos simples.

Mais sobre isso:

Eu recomendo que você analise este compartilhamento de slides pelos líderes do projeto Phing:

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

Isso lhe dará um alto nível e um uso concreto (mais o código) do phing. Não está relacionado ao drupal, mas lhe dará uma idéia melhor de como funciona.

chrisjlee
fonte