Drush и Phing избыточны?

24

Я установил JenkinsCI на нашем dev-сервере, чтобы начать автоматизировать процесс сборки и тестирования dev. Я использую Jenkins с плагином Git и некоторыми командами Drush через скрипт оболочки.

Исследуя, как использовать Jenkins в моем рабочем процессе Drupal, я наткнулся на пост об использовании Phing с Drush и Jenkins . Поэтому я посмотрел на Phing и не вижу, что он делает, что нельзя сделать с помощью команд Drush через сценарии оболочки.

Я пытаюсь решить, имеет ли смысл инвестировать время в изучение того, как использовать Phing. Я ищу некоторую ясность относительно того, какую выгоду я получу, включив команды Phing vs. Drush через сценарий Shell.

Поэтому мой вопрос к тем, кто использует Phing с Drush и Jenkins: чем отличаются Drush / Drush-Make и Phing? Почему вы решили начать использовать Phing в своем процессе?

Благодарность

DKinzer
источник

Ответы:

15

Ответ заключается в том, что они, конечно, не являются избыточными.

Это правда, что можно достичь того же конечного результата, используя скрипт bash, который включает команды drush (по крайней мере, часть сборки). Но если мы собираемся интегрировать наш процесс в инфраструктуру CI, такую ​​как JenkinsCI, то использовать что-то вроде phing (здесь можно заменить муравей или capistrano).

С помощью phing мы можем разбить процесс сборки на отдельные сегменты, которые могут интеллектуально отчитываться перед Jenkins.

Так например. Скажем, в рамках процесса сборки я использую drush, чтобы включить два модуля, узел и должен потерпеть неудачу. Тогда сборка должна провалиться. Но если все, что мы делаем, это сообщаем JenkinsCI выполнить следующую команду оболочки, JenkinsCI скажет, что сборка PASSED:

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

Понятно, что это не так. Однако если вместо этого мы используем ant или phing для определения того же процесса, мы также можем добавить некоторую логику сбоя, которую понимает Дженкинс, и, следовательно, потерпеть неудачу, как и должно быть. Следующий скрипт сборки phing пытается сделать то же самое, что и предыдущая команда, но завершается неудачно, как мы и ожидаем:

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

Кстати, муравей и phing почти идентичны. Преимущество phing для разработчиков PHP в том, что они могут более удобно расширять phing.

Что касается разработки и дружественной работы Drupal, то я не вижу особой ценности в расширении phing и думаю, что для создания шаблона умной сборки будет достаточно выполнения exec-задач.

Ну, чтобы ответить на мой вопрос, я потратил время, чтобы выяснить, как звонить. Это на самом деле довольно интуитивно понятно, и это не займет много времени, чтобы понять.

DKinzer
источник
2

Существует задача Drush для Phing Сейчас:

Вместо того, чтобы использовать exec, вы можете включить команды Drush, как это ...

  <drush command="site-install" assume="yes"">
        <option name="locale">uk</option>
        <option name="site-name" value="${sitename}" />
        <param>expert</param>
  </drush> 
andrewmacpherson
источник
Я немного использовал drushtask и не мог успешно взаимодействовать с предупреждениями о drush. Я закончил тем, что бросил это, потому что по этой причине и факту, что я нашел это ограничивающим в других отношениях.
ДКинзер
Было бы неплохо объяснить проблемы / ограничения, которые были у вас с задачей Drush в поддержке или запросом функции в ее очереди вопросов ( drupal.org/project/issues/phingdrushtask ). Чтобы позволить другим узнать и, возможно, внести ответы.
Пьер Байль,
2

Сценарии Phing являются заменой сценариев оболочки для контроля выполнения нескольких команд и их результатов. Drush - это интерфейс CLI для команд для взаимодействия с сайтом Drupal или связанных с Drupal. Они дополняют друг друга.

Пьер Буйль
источник
1

Ваш вопрос: перекрываются ли Phing и Drush?

TLDR; версия: Сорта. Но в основном нет.

Неограниченная версия: Drush и phing перекрываются лишь в нескольких случаях. В основном, дамп и архивирование веб-сайта будут одним из самых больших совпадений. Вы можете сделать это в phing, но вам придется написать много задач. Вы можете создать дамп базы данных, но drush делает это легко с помощью одной команды. Phing делает это, но вам просто нужно написать скрипт командной строки. Где phing shines - это возможность запускать тесты phpunit, запускать внешние инструменты, такие как jar, который сжимает ваши css-файлы, создавать и упаковывать сборки вашего сайта / приложения на drupal и т. Д.

Что такое финг?

Финг - по сути пилот, который выполняет команды. Если вы знакомы с Ant, Phing на самом деле является близким портом от Ant (это двоюродный брат на основе Java). Финг написан на PHP.

Вы можете использовать Phing для автоматизации задач и создания отчетов о результатах на основе этих задач. Drush, с другой стороны, просто выполняет задачи. Невозможно определить, оценить результаты вывода.

Пример использования для phing / drush:

Мне нужен drush, чтобы выгрузить базу данных и позвонить scpв пакет от prod до тестирования.

Phing может сохранить эти настройки во внешнем build.propertiesфайле и использовать их в своем проекте. Он также может хранить различные настройки для каждой среды. Например, Phing может ссылаться на последнюю завершенную работу, которая была выгружена с помощью drush в правильный корень документа.

Как все это работает?

Phing управляется XML. Он использует файл build.xml, получает атрибуты (иногда называемые целями) и выполняет простые команды.

Подробнее об этом:

Я настоятельно рекомендую вам ознакомиться с этим слайдом лидерами проекта Phing:

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

Это даст вам высокий уровень и некоторое конкретное использование (плюс код) phing. Это никак не связано с drupal, но даст вам лучшее представление о том, как он работает.

chrisjlee
источник