Czy Drush i Phing są zbędne?

24

Zainstalowałem JenkinsCI na naszym serwerze deweloperskim, aby rozpocząć automatyzację procesu tworzenia i testowania deweloperów. Używam Jenkinsa z wtyczką Git i niektórymi poleceniami Drush za pośrednictwem skryptu powłoki.

Podczas badania, jak używać Jenkinsa w mojej pracy programistycznej Drupal, natknąłem się na post dotyczący używania Phing z Drush i Jenkins . Spojrzałem więc na Phinga i nie widzę, co robi, czego nie można zrobić za pomocą poleceń Drusha za pomocą skryptów powłoki.

Próbuję zdecydować, czy warto zainwestować czas w naukę korzystania z Phing. Szukam pewnej jasności co do korzyści, jakie zyskam, wprowadzając komendy Phing vs. Drush za pomocą skryptu Shell.

Moje pytanie dotyczy tych, którzy używają Phing z Drush i Jenkins: czym różnią się Drush / Drush-Make i Phing? Dlaczego zdecydowałeś się zacząć używać Phing w swoim procesie?

Dzięki

DKinzer
źródło

Odpowiedzi:

15

Odpowiedź jest taka, że ​​z pewnością nie są one zbędne.

Prawdą jest, że ten sam efekt końcowy można osiągnąć za pomocą skryptu bash, który zawiera polecenia drush (przynajmniej część budynku). Ale jeśli chcemy zintegrować nasz proces ze środowiskiem CI, takim jak JenkinsCI, to użycie czegoś takiego jak phing (mrówka lub kapistrano można tutaj zastąpić) jest dobrym rozwiązaniem.

Dzięki phing możemy podzielić proces kompilacji na odrębne segmenty, które mogą raportować do Jenkins w inteligentny sposób.

Na przykład Powiedz, że jako część mojego procesu kompilacji używam drush, aby włączyć dwa moduły, węzeł i powinien zawodzić. Następnie kompilacja powinna zakończyć się niepowodzeniem. Ale jeśli wszystko, co zrobimy, to powiedz JenkinsCI, aby uruchomiło następującą komendę powłoki, JenkinsCI powie, że kompilacja PASSED:

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

Najwyraźniej to nie w porządku. Jeśli jednak zamiast tego użyjemy mrówki lub phinga do zdefiniowania tego samego procesu, możemy również dodać logikę błędów, którą Jenkins rozumie, i dlatego zawiodą tak, jak powinny. Poniższy skrypt kompilacji phing próbuje zrobić to samo, co poprzednie polecenie, ale kończy się niepowodzeniem, tak jak się spodziewamy:

<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 mrówka i phing są prawie identyczne. Zaletą dla programistów PHP w korzystaniu z phing jest to, że mogą wygodniej rozszerzać phing.

Jeśli chodzi o rozwój Drupala i drusha, które są tak dobre, jak ja, nie widzę zbyt dużej wartości w rozszerzaniu phinga i sądzę, że uruchomienie zadań exec wystarczyłoby do stworzenia inteligentnego szablonu kompilacji.

Cóż, aby odpowiedzieć na moje pytanie, poświęciłem czas na zastanowienie się nad phingiem. W rzeczywistości jest dość intuicyjny i nie zajmuje to zbyt długo.

DKinzer
źródło
2

Dostępne jest teraz zadanie Drush dla Phing :

Zamiast korzystania z exec możesz dołączyć takie polecenia Drusha ...

  <drush command="site-install" assume="yes"">
        <option name="locale">uk</option>
        <option name="site-name" value="${sitename}" />
        <param>expert</param>
  </drush> 
andrewmacpherson
źródło
Przez jakiś czas używałem drushtask i nie mogłem z powodzeniem wchodzić w interakcje z ostrzeżeniami drush. Skończyło się na tym, że go porzuciłem, ponieważ z tego powodu i tego, że uważałem to za ograniczenie pod innymi względami.
DKinzer,
Byłoby miło wyjaśnić problemy / ograniczenia związane z zadaniem Drush we wsparciu lub żądanie funkcji w kolejce problemów ( drupal.org/project/issues/phingdrushtask ). Aby inni mogli się dowiedzieć i być może udzielić odpowiedzi.
Pierre Buyle
2

Skrypty phingowe zastępują skrypty powłoki, kontrolujące wykonywanie wielu poleceń i ich wyników. Drush to interfejs CLI dla poleceń umożliwiających interakcję z witryną Drupal lub związaną z Drupal. Uzupełniają się.

Pierre Buyle
źródło
1

Twoje pytanie: czy Phing i Drush nakładają się na siebie?

TLDR; wersja: Sorta. Ale przeważnie nie.

Nieokreślona wersja: Drush i phing nakładają się na siebie w kilku przypadkach. Głównie zrzucanie i archiwizowanie strony internetowej byłoby jednym z większych nakładów. Możesz to zrobić phingiem, ale będziesz musiał napisać wiele zadań. Możesz zrzucić bazę danych, ale drush robi to tak łatwo za pomocą jednego polecenia. Phing to robi, ale wystarczy napisać skrypt wiersza poleceń. Tam, gdzie phing shine to możliwość uruchamiania testów phpunit, uruchom zewnętrzne narzędzia, takie jak jar, który kompresuje twoje pliki css, utwórz i spakuj kompilację twojej strony / aplikacji drupal itp.

Co to jest phing?

Phing jest zasadniczo pilotem, który wykonuje polecenia. Jeśli znasz Ant, Phing jest w rzeczywistości bliskim portem od Anta (kuzyn z Java). Phing jest napisany w PHP.

Możesz użyć Phing do automatyzacji zadań i raportowania wyników na podstawie tych zadań. Z drugiej strony Drush po prostu wykonuje zadania. Nie można określić oceny wyników wyjściowych.

Przykładowy przypadek użycia phing / drush:

Potrzebuję drush, aby zrzucić bazę danych i wysłać phing do scppakietu od prod do testowania.

Phing może przechowywać te ustawienia w zewnętrznym build.propertiespliku i pobierać je do projektu. Może także przechowywać różne ustawienia dla każdego środowiska. Na przykład Phing może dowiązać symbolicznie ostatnie ukończone, które zostało zrzucone przez drush, do odpowiedniego katalogu głównego dokumentu.

Jak to wszystko działa?

Phing jest sterowany przez xml. Zużywa plik build.xml i pobiera atrybuty (czasem nazywane celami) i wykonuje proste polecenia.

Więcej na ten temat:

Gorąco polecam przejrzenie tego pokazu slajdów przez liderów projektu Phing:

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

Daje ci wysoki poziom i pewne konkretne użycie (plus kod) phing. Nie ma to żadnego związku z drupalem, ale da ci lepsze pojęcie o tym, jak to działa.

chrisjlee
źródło