Apakah Drush dan Phing berlebihan?

24

Saya telah menginstal JenkinsCI di server dev kami untuk mulai mengotomatisasi proses pengembangan dan pengujian dev kami. Saya menggunakan Jenkins dengan Git Plugin dan beberapa perintah Drush melalui skrip shell.

Ketika meneliti bagaimana menggunakan Jenkins dalam alur kerja dev Drupal saya, saya menemukan posting tentang penggunaan Phing dengan Drush dan Jenkins . Jadi saya melihat Phing dan saya tidak dapat melihat apa yang dilakukannya yang tidak dapat dilakukan dengan menggunakan perintah Drush melalui skrip shell.

Saya mencoba memutuskan apakah masuk akal bagi saya untuk menginvestasikan waktu dalam mempelajari cara menggunakan Phing. Saya mencari kejelasan tentang manfaat apa yang akan saya peroleh dengan memasukkan perintah Phing vs Drush melalui skrip Shell.

Jadi pertanyaan saya adalah bagi mereka yang menggunakan Phing dengan Drush dan Jenkins: bagaimana perbedaan antara Drush / Drush-Make dan Phing? Mengapa Anda memutuskan untuk mulai menggunakan Phing dalam proses Anda?

Terima kasih

DKinzer
sumber

Jawaban:

15

Jawabannya adalah mereka tentu tidak berlebihan.

Memang benar bahwa seseorang dapat mencapai hasil akhir yang sama menggunakan skrip bash yang mencakup perintah drush (setidaknya bagian bangunan). Tetapi, jika yang ingin kita lakukan adalah mengintegrasikan proses kita ke dalam kerangka CI seperti JenkinsCI, maka menggunakan sesuatu seperti phing (semut atau capistrano dapat diganti di sini) adalah cara yang harus ditempuh.

Dengan phing, kita dapat memecah proses pembuatan menjadi segmen berbeda yang dapat melaporkan kembali ke Jenkins dengan cara yang cerdas.

Jadi misalnya. Katakanlah sebagai bagian dari proses build saya, saya menggunakan drush untuk mengaktifkan dua modul, node dan shouldfail. Maka membangun harus gagal. Tetapi jika semua yang kita lakukan adalah memberi tahu JenkinsCI untuk menjalankan perintah shell berikut, JenkinsCI akan mengatakan bahwa build LULUS:

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

Jelas itu tidak benar. Namun jika sebaliknya kita menggunakan semut atau phing untuk mendefinisikan proses yang sama, kita juga dapat menambahkan beberapa logika gagal yang dipahami Jenkins, dan karenanya gagal sebagaimana mestinya. Skrip pembuatan phing berikut mencoba melakukan hal yang sama dengan perintah sebelumnya, tetapi gagal seperti yang kami harapkan:

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

Semut dan phing BTW hampir identik. Keuntungan bagi pengembang PHP dalam menggunakan phing adalah mereka dapat memperpanjang phing dengan lebih nyaman.

Adapun pengembangan Drupal dan drush menjadi sebagus itu, saya tidak melihat terlalu banyak nilai dalam memperluas phing, dan berpikir bahwa menjalankan tugas exec akan cukup untuk membuat template build yang cerdas.

Nah, untuk menjawab pertanyaan saya, saya akhirnya menginvestasikan waktu untuk mencari tahu phing. Ini sebenarnya cukup intuitif dan tidak butuh waktu lama untuk mencari tahu.

DKinzer
sumber
2

Ada tugas Drush yang tersedia untuk Phing sekarang:

Alih-alih menggunakan exec Anda dapat memasukkan perintah Drush seperti ini ...

  <drush command="site-install" assume="yes"">
        <option name="locale">uk</option>
        <option name="site-name" value="${sitename}" />
        <param>expert</param>
  </drush> 
andrewmacpherson
sumber
Saya menggunakan Drushtask sedikit dan saya tidak bisa berhasil berinteraksi dengan peringatan drushtask. Saya akhirnya menjatuhkannya karena alasan itu dan fakta bahwa saya menemukannya membatasi dalam hal lain.
DKinzer
Akan menyenangkan untuk menjelaskan masalah / batasan yang Anda miliki dengan tugas Drush dalam dukungan atau permintaan fitur pada antrian masalahnya ( drupal.org/project/issues/phingdrushtask ). Untuk membiarkan orang lain mencari tahu dan mungkin berkontribusi jawaban.
Pierre Buyle
2

Skrip phing adalah pengganti skrip shell, untuk mengontrol eksekusi beberapa perintah dan hasilnya. Drush adalah antarmuka CLI untuk perintah untuk berinteraksi dengan situs Drupal atau terkait dengan Drupal. Mereka saling melengkapi.

Pierre Buyle
sumber
1

Pertanyaan Anda: Apakah Phing dan Drush tumpang tindih?

TLDR; versi: Sorta. Tapi kebanyakan tidak.

Versi tidak lengkap: Drush dan phing tumpang tindih hanya dalam beberapa contoh. Terutama, dumping dan pengarsipan situs web akan menjadi salah satu tumpang tindih yang lebih besar. Anda bisa melakukannya di phing tetapi Anda harus menulis banyak tugas. Anda bisa melakukan Dump database tetapi drush melakukannya dengan mudah dengan satu perintah. Phing memang melakukan itu, tetapi Anda hanya perlu menulis skrip baris perintah. Di mana phing bersinar adalah kemampuan untuk menjalankan tes phpunit, jalankan alat eksternal seperti toples yang mengkompres file css Anda, membuat dan mengemas pembuatan situs drupal Anda / aplikasi, dll.

Apa itu phing?

Phing pada dasarnya adalah pilot yang menjalankan perintah. Jika Anda terbiasa dengan Ant, Phing sebenarnya adalah port dekat dari Ant (Ini adalah sepupu berbasis java). Phing ditulis dalam PHP.

Anda dapat menggunakan Phing untuk mengotomatiskan tugas dan melaporkan hasil berdasarkan tugas tersebut. Drush, di sisi lain, hanya melakukan tugas. Tidak dapat menentukan mengevaluasi hasil dari output.

Contoh use case untuk phing / drush:

Saya perlu drush untuk membuang database dan phing ke scppaket dari prod ke pengujian.

Phing dapat menyimpan pengaturan ini dalam build.propertiesfile eksternal dan sumber mereka ke proyek Anda. Itu juga dapat menyimpan pengaturan yang berbeda untuk setiap lingkungan juga. Misalnya Phing dapat symlink selesai terbaru yang telah dibuang oleh drush ke root dokumen yang tepat.

Bagaimana cara kerjanya?

Phing digerakkan oleh xml. Itu mengkonsumsi file build.xml dan mengambil atribut (kadang-kadang disebut target) dan menjalankan perintah sederhana.

Lebih lanjut tentang ini:

Saya sangat menyarankan Anda meninjau slideshare ini oleh para pemimpin proyek Phing:

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

Ini akan memberi Anda tingkat tinggi dan beberapa penggunaan nyata (plus kode) phing. Ini tidak berhubungan dengan drupal tetapi akan memberi Anda ide yang lebih baik tentang cara kerjanya.

chrisjlee
sumber