Drush ve Phing gereksiz mi?


24

Dev inşa ve test sürecimizi otomatik hale getirmek için Jenkins sunucusunu dev sunucumuza kurdum. Jenkins'i Git Eklentisi ve bazı Drush komutlarıyla kabuk komut dosyasıyla kullanıyorum.

Jenkins'in Drupal dev iş akışımda nasıl kullanılacağını araştırırken , Phing'i Drush ve Jenkins ile kullanma hakkında bir yazıyla karşılaştım . Bu yüzden Phing'e baktım ve Drush komutlarını bir kabuk betiği kullanarak yapmanın ne yaptığını göremiyorum.

Phing'i kullanmayı öğrenmek için zaman harcamamın benim için anlamlı olup olmayacağına karar vermeye çalışıyorum. Shell komut dosyası ile Phing ve Drush komutlarını dahil ederek ne kadar kazanacağım konusunda biraz netlik arıyorum.

Öyleyse benim sorum Phing'i Drush ve Jenkins ile kullananlar için: Drush / Drush-Make ve Phing'in farkı nedir? Phing'i işleminizde kullanmaya neden karar verdiniz?

Teşekkürler

Yanıtlar:


15

Cevap, kesinlikle gereksiz olmadıklarıdır.

Drush komutlarını içeren bir bash betiği kullanarak en azından aynı sonucu elde edebileceği doğrudur (en azından inşaat bölümü). Ancak, eğer yapmak istediğimiz şey, sürecimizi JenkinsCI gibi bir CI çerçevesine entegre etmekse, phing gibi bir şey kullanmak (burada karınca veya capistrano ikame edilebilir) bu yoldur.

Phing ile derleme sürecini akıllı bir şekilde Jenkins'e raporlayabilecek farklı bölümlere ayırabiliriz.

Mesela. Derleme işlemimin bir parçası olarak, iki modülü etkinleştirmek için drush kullandığımı söyleyin, düğüm ve hata. O zaman yapı başarısız olmalı. Ancak, yaptığımız tek şey JenkinsCI'ya şu kabuk komutunu çalıştırmasını söylemekse, JenkinsCI derleme işleminin ŞİFRE:

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

Açıkçası bu doğru değil. Bununla birlikte, aynı işlemi tanımlamak için karınca veya phing kullanırsak, Jenkins'in anladığı ve dolayısıyla olması gerektiği gibi başarısız olan bazı başarısız mantıkları da ekleyebiliriz. Aşağıdaki phing build betiği önceki komutla aynı şeyi yapmaya çalışır, ancak beklediğimiz gibi başarısız olur:

<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 karınca ve phing neredeyse aynıdır. PHP geliştiricilerinin phing kullanmasındaki avantajı, phing'i daha rahat uzatabilecek olmalarıdır.

Drupal gelişimine ve sarhoşluğa olduğu kadar iyi gelince, phing'i genişletmede çok fazla değer görmüyorum ve exec görevlerini çalıştırmanın akıllı bir derleme şablonu oluşturmak için yeterli olacağını düşünüyorum.

Soruma cevap vermek için phing'i bulmak için zaman harcadım. Aslında oldukça sezgisel ve bunu anlamak çok uzun sürmüyor.


2

Şimdi Phing için bir Drush görevi var :

Exec kullanmak yerine, bunun gibi Drush kodlarını ekleyebilirsiniz ...

  <drush command="site-install" assume="yes"">
        <option name="locale">uk</option>
        <option name="site-name" value="${sitename}" />
        <param>expert</param>
  </drush> 

Az önce Drushtask kullandım ve Drush uyarılarıyla başarılı bir şekilde etkileşime giremedim. Bıraktım, çünkü bu nedenle ve onu diğer yönlerden sınırlayıcı buldum.
DKinzer 17:12

Drush görevinde yaşadığınız sorunları / sınırlarını destek kuyruğunda açıklamak veya sorun sırasındaki özellik talebini açıklamak iyi olurdu ( drupal.org/project/issues/phingdrushtask ). Başkalarının öğrenmelerini ve belki de cevap vermelerini sağlama
Pierre Buyle,

2

Phing komut dosyaları, birden çok komutun yürütülmesini ve sonuçlarını denetlemek için kabuk komut dosyalarının yerine geçer. Drush, bir Drupal sitesiyle veya Drupal ile ilgili olarak etkileşime giren komutlar için bir CLI arayüzüdür. Birbirlerini tamamlarlar.


1

Sorunuz: Phing ve Drush çakışıyor mu?

TLDR; sürüm: Sorta. Ama çoğunlukla hayır.

Kısaltılmamış versiyon: Drush ve phing sadece birkaç örnekte örtüşür. Temel olarak, bir web sitesini boşaltmak ve arşivlemek en büyük çakışmalardan biri olacaktır. Bunu phing ile yapabilirsin ama bir sürü görev yazman gerekirdi. Bir veritabanı Dump olabilir ama drush tek bir komutla çok kolay yapar. Phing bunu yapar, ancak yalnızca bir komut satırı komut dosyası yazmanız gerekir. Phing'in parladığı yerde phpunit testlerini yürütme, css dosyalarınızı sıkıştıran bir kavanoz gibi harici araçlar çalıştırma, drupal siteniz / uygulamanızın bir yapısını oluşturma ve paketleme yeteneği.

Phing nedir?

Phing aslında komutları uygulayan pilottur. Ant ile aşina iseniz, Phing aslında Ant'a yakın bir limandır (Java tabanlı kuzen). Phing PHP ile yazılmıştır.

Görevleri otomatikleştirmek ve bu görevleri temel alarak sonuçları rapor etmek için Phing'i kullanabilirsiniz. Drush, diğer yandan, sadece görevleri yerine getirir. Çıktı sonuçlarını değerlendirmeyi belirleyemiyor.

Phing / drush için örnek kullanım örneği:

Proddan sınamaya kadar veritabanı ve phing'i scppakete atmak için aceleye ihtiyacım var .

Phing, bu ayarları harici bir build.propertiesdosyada saklayabilir ve projenize kaynak sağlayabilir. Ayrıca her ortam için farklı ayarları da saklayabilir. Örneğin, Phing, drush tarafından atılan en son tamamlanan işlemi doğru belge köküne bağlayabilir.

Bütün bunlar nasıl çalışıyor?

Phing, bir xml tarafından sürülür. Bir build.xml dosyasını kullanır ve nitelikleri alır (bazen hedef olarak adlandırılır) ve basit komutları yerine getirir.

Bu konuda daha fazlası:

Phing proje liderleri tarafından bu slayt gösterisini gözden geçirmenizi şiddetle tavsiye ediyorum:

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

Size yüksek seviyede bir phing ve bazı somut kullanım (artı kod) verecektir. Drupal ile ilgili hiçbir şekilde değildir, ancak nasıl çalıştığı hakkında size daha iyi bir fikir verecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.