Drush และ Phing ซ้ำซ้อนหรือไม่


24

ฉันได้ติดตั้ง JenkinsCI บนเซิร์ฟเวอร์ dev ของเราแล้วเพื่อเริ่มกระบวนการสร้างและทดสอบอัตโนมัติ ฉันใช้ Jenkins กับปลั๊กอิน Git และคำสั่ง Drush ผ่านเชลล์สคริปต์

เมื่อค้นคว้าวิธีการใช้เจนกินส์ในเวิร์กโฟลว์ dev ของฉัน Drupal ผมมาในการโพสต์เกี่ยวกับการใช้พิงค์กับ Drush และเจนกินส์ ดังนั้นฉันจึงดูที่ Phing และฉันไม่สามารถเห็นสิ่งที่ทำไม่สามารถทำได้โดยใช้คำสั่ง Drush ผ่านเชลล์สคริปต์

ฉันพยายามตัดสินใจว่าเหมาะสมหรือไม่ที่จะใช้เวลาในการเรียนรู้วิธีใช้ Phing ฉันกำลังมองหาความชัดเจนว่าฉันจะได้ประโยชน์อะไรจากการรวมคำสั่ง Phing กับ Drush ผ่านเชลล์สคริปต์

ดังนั้นคำถามของฉันสำหรับผู้ที่ใช้ Phing กับ Drush และ Jenkins: Drush / Drush-Make และ Phing แตกต่างกันอย่างไร ทำไมคุณถึงตัดสินใจที่จะเริ่มใช้ Phing ในกระบวนการของคุณ?

ขอบคุณ

คำตอบ:


15

คำตอบคือพวกเขาจะไม่ซ้ำซ้อนอย่างแน่นอน

มันเป็นความจริงที่ว่าคน ๆ หนึ่งสามารถบรรลุเป้าหมายเดียวกันได้โดยใช้สคริปต์ทุบตีที่มีคำสั่ง drush (อย่างน้อยส่วนของสิ่งปลูกสร้าง) แต่ถ้าสิ่งที่เราต้องการทำคือการรวมกระบวนการของเราเข้ากับกรอบ CI เช่น JenkinsCI ดังนั้นการใช้ phing (ant หรือ capistrano อาจถูกแทนที่ที่นี่) เป็นวิธีที่จะไป

ด้วย phing เราสามารถแยกกระบวนการสร้างออกเป็นเซ็กเมนต์ที่แตกต่างกันซึ่งสามารถรายงานกลับไปที่เจนกินส์อย่างชาญฉลาด

ตัวอย่างเช่น บอกว่าเป็นส่วนหนึ่งของกระบวนการสร้างของฉันฉันใช้ drush เพื่อเปิดใช้งานสองโมดูลโหนดและควรจะล้มเหลว จากนั้นบิลด์ควรล้มเหลว แต่ถ้าเราบอกให้ JenkinsCI เรียกใช้คำสั่งเชลล์ต่อไปนี้ JenkinsCI จะบอกว่าการสร้างผ่าน:

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>

BTW ant และ phing เกือบจะเหมือนกัน ข้อดีสำหรับนักพัฒนา PHP ในการใช้ phing คือพวกเขาสามารถขยาย phing ได้อย่างสะดวกสบายยิ่งขึ้น

สำหรับการพัฒนาของ Drupal และการใช้ Drush นั้นทำได้ดีเท่าที่เป็นอยู่ฉันไม่เห็นคุณค่ามากเกินไปในการขยาย phing และคิดว่าการเรียกใช้งาน exec จะเพียงพอต่อการสร้างเทมเพลตบิลด์อัจฉริยะ

เพื่อที่จะตอบคำถามของฉันฉันตัดสินใจลงทุนเพื่อหา phing มันใช้งานง่ายและไม่ต้องใช้เวลานานเกินกว่าจะคิดออก


2

มีภารกิจ Drush สำหรับ Phingอยู่ในขณะนี้:

แทนที่จะใช้ผู้บริหารคุณสามารถรวมคำสั่ง Drush เช่นนี้ ...

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

ฉันใช้ drushtask มาเล็กน้อยและฉันก็ไม่สามารถโต้ตอบกับคำเตือน drush ได้สำเร็จ ฉันลงเอยด้วยการวางเพราะเหตุผลนั้นและความจริงที่ว่าฉันพบว่ามัน จำกัด ในแง่อื่น
DKinzer

มันจะเป็นการดีที่จะอธิบายปัญหา / ข้อ จำกัด ที่คุณมีกับงาน Drush ในการสนับสนุนหรือขอคุณสมบัติในคิวปัญหา ( drupal.org/project/issues/phingdrushtask ) เพื่อให้ผู้อื่นค้นหาและอาจมีส่วนร่วมในการตอบ
Pierre Buyle

2

Phing script คือการแทนที่เชลล์สคริปต์เพื่อควบคุมการทำงานของคำสั่งหลายคำสั่งและผลลัพธ์ Drush เป็นอินเตอร์เฟส CLI สำหรับคำสั่งในการโต้ตอบกับเว็บไซต์ Drupal หรือเกี่ยวข้องกับ Drupal พวกเขาเติมเต็มซึ่งกันและกัน


1

คำถามของคุณ: Phing และ Drush ทับซ้อนกันหรือไม่?

TLDR; รุ่น: Sorta แต่ส่วนใหญ่ไม่ใช่

รุ่นที่ไม่มีการย่อ: Drush และ phing ซ้อนทับกันในสองสามกรณีเท่านั้น โดยพื้นฐานแล้วการทิ้งและเก็บถาวรเว็บไซต์จะเป็นหนึ่งในการทับซ้อนที่ใหญ่กว่า คุณสามารถทำได้ใน phing แต่คุณจะต้องเขียนงานจำนวนมาก คุณสามารถถ่ายโอนฐานข้อมูลได้ แต่การใช้งานทำได้ง่ายด้วยคำสั่งเดียว Phing ทำเช่นนั้น แต่คุณต้องเขียนสคริปต์บรรทัดคำสั่ง ที่ phing ส่องคือความสามารถในการเรียกใช้การทดสอบ phpunit เรียกใช้เครื่องมือภายนอกเช่น jar ที่บีบอัดไฟล์ css ของคุณสร้างและจัดทำแพ็คเกจของไซต์ / แอปพลิเคชัน drupal ของคุณเป็นต้น

phing คืออะไร

ฟิงเป็นนักบินหลักที่ดำเนินการคำสั่ง หากคุณคุ้นเคยกับ Ant จริง ๆ แล้ว Phing นั้นเป็นพอร์ตปิดจาก Ant (เป็นลูกพี่ลูกน้องที่ใช้จาวา) Phing เขียนด้วย PHP

คุณสามารถใช้ Phing เพื่อทำงานอัตโนมัติและรายงานผลลัพธ์ตามงานเหล่านั้น Drush ในทางกลับกันเพียงแค่ทำงาน ไม่สามารถระบุผลลัพธ์ของผลลัพธ์ได้

ตัวอย่างกรณีการใช้งานสำหรับ phing / drush:

ฉันต้องการ drush เพื่อถ่ายโอนฐานข้อมูลและ phing ไปscpยังแพคเกจจากแยงกับการทดสอบ

Phing สามารถจัดเก็บการตั้งค่าเหล่านี้ในbuild.propertiesไฟล์ภายนอกและแหล่งข้อมูลเหล่านั้นในโครงการของคุณ สามารถเก็บการตั้งค่าที่แตกต่างกันสำหรับแต่ละสภาพแวดล้อมได้เช่นกัน เช่น Phing สามารถเชื่อมโยงความสมบูรณ์ล่าสุดที่ถูกเททิ้งโดย drush ไปยังรูทเอกสารที่ถูกต้อง

ทั้งหมดนี้ทำงานอย่างไร

Phing นั้นขับเคลื่อนด้วย xml มันใช้ไฟล์ build.xml และใช้เวลาในแอตทริบิวต์ (บางครั้งเรียกว่าเป้าหมาย) และดำเนินการคำสั่งง่าย ๆ

เพิ่มเติมเกี่ยวกับเรื่องนี้:

ฉันขอแนะนำให้คุณอ่านภาพสไลด์นี้โดยหัวหน้าโครงการ Phing:

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

มันจะให้ระดับสูงและการใช้งานที่เป็นรูปธรรม (บวกรหัส) ของ phing มันไม่ได้เกี่ยวข้องกับ drupal แต่อย่างใดมันจะทำให้คุณมีความคิดที่ดีขึ้นว่ามันทำงานอย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.