DrushとPhingは冗長ですか?


24

開発サーバーにJenkinsCIをインストールして、開発ビルドとテストプロセスの自動化を開始しました。私はシェルスクリプトを介してGitプラグインといくつかのDrushコマンドでJenkinsを使用しています。

Drupal開発ワークフローでJenkinsを使用する方法を研究しているときに、PhingをDrushとJenkinsで使用することに関する投稿に出会いました。だから私はPhingを見て、シェルスクリプトを介してDrushコマンドを使用することでは不可能なことを理解できません。

Phingの使い方を学ぶことに時間を費やすことが理にかなっているかどうかを判断しようとしています。シェルスクリプトを介してPhingコマンドとDrushコマンドを組み込むことでどのようなメリットが得られるかについて、明確にしたいと思っています。

だから私の質問は、PhingをDrushとJenkinsで使用する人たちに対するものです。Drush/ Drush-MakeとPhingがどのように異なるのでしょうか。プロセスでPhingを使用することにしたのはなぜですか?

ありがとう

回答:


15

答えは、それらは確かに冗長ではないということです。

ブラシコマンド(少なくとも建物部分)を含むbashスクリプトを使用して、同じ最終結果を達成できることは事実です。しかし、JenkinsCIのようなCIフレームワークにプロセスを統合することを目指している場合は、phing(antまたはcapistranoをここで置き換えることができます)を使用する方法があります。

phingを使用すると、ビルドプロセスを個別のセグメントに分割でき、インテリジェントな方法でJenkinsに報告できます。

例えば ビルドプロセスの一部として、drushを使用して、nodeとshouldfailの2つのモジュールを有効にするとします。その後、ビルドは失敗します。ただし、JenkinsCIに次のシェルコマンドを実行するように指示するだけの場合、JenkinsCIはビルドが成功したと言います。

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

明らかにそれは正しくありません。ただし、代わりにantまたはphingを使用して同じプロセスを定義する場合、Jenkinsが理解する失敗ロジックを追加することもできます。したがって、失敗するはずです。次の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の開発とドラッシがそれなりに優れているという点では、phingを拡張することにはあまり価値がなく、execタスクを実行するだけでスマートビルドテンプレートを作成できれば十分だと思います。

まあ、私の質問に答えるために、私はphingを理解するために時間を費やしました。実際には非常に直感的で、理解するのにそれほど時間はかかりません。


2

現在、Phingで利用可能なDrushタスクがあります

execを使用する代わりに、このようなDrushコマンドを含めることができます...

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

私は少しの間drushtaskを使用しましたが、drush warningsとうまくやり取りできませんでした。その理由と、それが他の点で制限されているという事実のために、私はそれをドロップしました。
DKinzer

課題キュー(drupal.org/project/issues/phingdrushtask)のサポートまたは機能リクエストのDrushタスクで発生した課題/制限について説明するとよいでしょう。他の人が答えを見つけて、多分貢献できるようにするため。
ピエールバイル

2

Phingスクリプトは、複数のコマンドの実行とその結果を制御するためのシェルスクリプトの代替です。Drushは、DrupalサイトまたはDrupalに関連するコマンドと対話するためのCLIインターフェイスです。彼らはお互いを補完します。


1

あなたの質問:PhingとDrushは重複していますか?

TLDR; バージョン: ソルタ。しかし、ほとんどありません。

要約されていないバージョン:いくつかの場合にのみ、ブラッシュとフェージングが重なります。主に、ウェブサイトのダンプとアーカイブは、より大きな重複の1つです。phingで実行できますが、多くのタスクを作成する必要があります。データベースをダンプできますが、drushは1つのコマンドで非常に簡単に実行できます。Phingはそれを行いますが、コマンドラインスクリプトを作成するだけです。phingが輝くのは、phpunitテストを実行する機能、cssファイルを圧縮するjarなどの外部ツールを実行する機能、drupalサイト/アプリケーションのビルドを作成してパッケージ化する機能などです。

phingとは何ですか?

Phingは、本質的にコマンドを実行するパイロットです。Antに精通している場合、Phingは実際にはAntからの密接なポートです(javaベースのいとこです)。PhingはPHPで書かれています。

Phingを使用してタスクを自動化し、それらのタスクに基づいて結果を報告できます。一方、Drushはタスクを実行するだけです。出力の結果を評価することはできません。

phing / drushの使用例:

データベースをダンプして、scpprodからテストまでパッケージにphingするのに一息つける必要があります。

Phingはこれらの設定を外部build.propertiesファイルに保存し、プロジェクトに取り込むことができます。環境ごとに異なる設定を保存することもできます。例えば、Phingは、最新の完了したものをシンボリックリンクすることができます。

これはどのように機能しますか?

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.