web-dev-qa-db-ja.com

DrushとPhingは冗長ですか?

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

私のDrupal devワークフローでJenkinsを使用する方法を研究しているときに、 Phing with Drush and Jenkins を使用することについての投稿に出くわしました。シェルスクリプトを介してDrushコマンドを使用して実行できないことを確認します。

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

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

ありがとう

23
DKinzer

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

確かに、drushコマンド(少なくともビルドパーツ)を含む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>

ところでantとphingはほとんど同じです。 PHP開発者がphingを使用する利点は、phingをより快適に拡張できることです。

Drupal開発とdrushがそれで良いので、phingを拡張することにあまり価値があるとは思いません。実行タスクを実行すれば、スマートビルドテンプレートを作成するには十分だと思います。

さて、私の質問に答えるために、私は時間を費やしてphingを理解することになりました。それは実際にはかなり直感的で、理解するのにそれほど長くはかかりません。

16
DKinzer

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

2
Pierre Buyle

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

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

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

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

phingとは何ですか?

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

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

phing/drushの使用例:

データベースをダンプし、パッケージを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とはまったく関係ありませんが、それがどのように機能するかについてより良い考えを与えるでしょう。

1
chrisjlee