Là Drush và Phing dư thừa?


24

Tôi đã cài đặt JenkinsCI trên máy chủ dev của chúng tôi để bắt đầu tự động hóa quá trình thử nghiệm và xây dựng dev của chúng tôi. Tôi đang sử dụng Jenkins với Git Plugin và một số lệnh Drush thông qua tập lệnh shell.

Khi nghiên cứu cách sử dụng Jenkins trong quy trình phát triển Drupal dev của tôi, tôi đã tình cờ thấy một bài viết về việc sử dụng Phing với Drush và Jenkins . Vì vậy, tôi đã xem Phing và tôi không thể thấy những gì nó không thể thực hiện được bằng cách sử dụng các lệnh Drush thông qua các tập lệnh shell.

Tôi đang cố gắng quyết định xem có hợp lý không khi tôi đầu tư thời gian vào việc học cách sử dụng Phing. Tôi đang tìm kiếm một số sự rõ ràng về những lợi ích mà tôi sẽ đạt được bằng cách kết hợp các lệnh Phing vs Drush thông qua tập lệnh Shell.

Vì vậy, câu hỏi của tôi là dành cho những người sử dụng Phing với Drush và Jenkins: Drush / Drush-Make và Phing khác nhau như thế nào? Tại sao bạn quyết định bắt đầu sử dụng Phing trong quy trình của mình?

Cảm ơn

Câu trả lời:


15

Câu trả lời là chúng chắc chắn không dư thừa.

Đúng là người ta có thể thực hiện cùng một kết quả cuối cùng bằng cách sử dụng tập lệnh bash bao gồm các lệnh drush (ít nhất là phần xây dựng). Nhưng, nếu những gì chúng tôi đang muốn làm là tích hợp quy trình của chúng tôi vào một khung CI như JenkinsCI, thì sử dụng thứ gì đó như phing (ant hoặc capistrano có thể được thay thế ở đây) là cách tốt nhất.

Với phing, chúng ta có thể chia quá trình xây dựng thành các phân đoạn riêng biệt có thể báo cáo lại cho Jenkins một cách thông minh.

Ví dụ. Nói rằng như là một phần của quá trình xây dựng của tôi, tôi sử dụng drush để kích hoạt hai mô-đun, nút và nút. Sau đó, việc xây dựng nên thất bại. Nhưng nếu tất cả những gì chúng ta làm là bảo JenkinsCI chạy lệnh shell sau, JenkinsCI sẽ nói rằng bản dựng PASSED:

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

Rõ ràng điều đó không đúng. Tuy nhiên, nếu thay vào đó, chúng ta sử dụng ant hoặc phing để xác định cùng một quy trình, chúng ta cũng có thể thêm một số logic thất bại mà Jenkins hiểu, và do đó thất bại như bình thường. Tập lệnh xây dựng phing sau đây cố gắng thực hiện tương tự như lệnh cũ, nhưng không thành công như chúng ta mong đợi:

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

Kiến BTW và phing gần như giống hệt nhau. Lợi thế cho các nhà phát triển PHP trong việc sử dụng phing là họ có thể thoải mái mở rộng phing hơn.

Đối với việc phát triển Drupal và drush cũng tốt như vậy, tôi không thấy quá nhiều giá trị trong việc mở rộng phing và nghĩ rằng việc chạy các tác vụ thực thi sẽ đủ để tạo ra một mẫu xây dựng thông minh.

Vâng, để trả lời câu hỏi của tôi, cuối cùng tôi đã đầu tư thời gian để tìm ra phing. Nó thực sự khá trực quan và không mất quá nhiều thời gian để tìm ra.


2

Hiện tại có một nhiệm vụ Drush dành cho Phing :

Thay vì sử dụng exec, bạn có thể bao gồm các đồng chí Drush như thế này ...

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

Tôi đã sử dụng drushtask một chút và tôi không thể tương tác thành công với các cảnh báo drush. Cuối cùng tôi đã bỏ nó vì lý do đó và thực tế là tôi thấy nó hạn chế ở các khía cạnh khác.
DKinzer

Sẽ thật tuyệt khi giải thích các vấn đề / giới hạn mà bạn có với nhiệm vụ Drush trong hỗ trợ hoặc yêu cầu tính năng trên hàng đợi vấn đề của nó ( drupal.org/project/issues/phingdrushtask ). Để cho người khác tìm ra và có thể đóng góp câu trả lời.
Pierre Buyle

2

Tập lệnh phing là sự thay thế cho tập lệnh shell, để kiểm soát việc thực thi nhiều lệnh và kết quả của chúng. Drush là giao diện CLI cho các lệnh tương tác với trang web Drupal hoặc liên quan đến Drupal. Họ bổ sung cho nhau.


1

Câu hỏi của bạn: Phing và Drush có trùng nhau không?

TLDR; phiên bản: Sắp xếp. Nhưng chủ yếu là không.

Phiên bản không rút gọn: Drush và phing chỉ trùng lặp trong một vài trường hợp. Chủ yếu, bán phá giá và lưu trữ một trang web sẽ là một trong những chồng chéo lớn hơn. Bạn có thể làm điều đó trong phing nhưng bạn sẽ phải viết rất nhiều nhiệm vụ. Bạn có thể kết xuất một cơ sở dữ liệu nhưng drush thực hiện nó rất dễ dàng với một lệnh. Phing làm điều đó nhưng bạn chỉ cần viết một kịch bản dòng lệnh. Trong đó phing tỏa sáng là khả năng chạy thử nghiệm phpunit, chạy các công cụ bên ngoài như một cái bình nén các tệp css của bạn, tạo và đóng gói bản dựng của trang web / ứng dụng drupal của bạn, v.v.

Phing là gì?

Phing thực chất là phi công thực thi các lệnh. Nếu bạn quen thuộc với Ant, Phing thực sự là một cổng gần từ Ant (Đó là anh em họ dựa trên java). Phing được viết bằng PHP.

Bạn có thể sử dụng Phing để tự động hóa các tác vụ và báo cáo kết quả dựa trên các tác vụ đó. Drush, mặt khác, chỉ thực hiện các nhiệm vụ. Không thể xác định đánh giá kết quả đầu ra.

Ví dụ trường hợp sử dụng cho phing / drush:

Tôi cần drush để kết xuất cơ sở dữ liệu và phing vào scpgói từ prod đến thử nghiệm.

Phing có thể lưu trữ các cài đặt này trong một build.propertiestệp bên ngoài và đưa chúng vào dự án của bạn. Nó cũng có thể lưu trữ các cài đặt khác nhau cho từng môi trường. Ví dụ, Phing có thể liên kết các bản hoàn thành mới nhất đã bị đổ bởi drush vào đúng tài liệu gốc.

Làm thế nào để tất cả điều này làm việc?

Phing được điều khiển bởi một xml. Nó tiêu thụ một tệp build.xml và nhận các thuộc tính (đôi khi được gọi là các mục tiêu) và thực thi các lệnh đơn giản.

Thêm về điều này:

Tôi đặc biệt khuyên bạn nên xem lại bản trình chiếu này của các nhà lãnh đạo dự án Phing:

http://www.sl slideshoware.net/michieltcs/building-and-deploying-php-appluggest-with-phing

Nó sẽ cung cấp cho bạn mức độ cao và một số cách sử dụng cụ thể (cộng với mã) của phing. Nó không liên quan đến drupal nhưng nó sẽ cho bạn ý tưởng tốt hơn về cách thức hoạt động của nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.