Drush和Phing是否多余?


24

我已经在我们的开发服务器上安装了JenkinsCI,以开始自动化我们的开发构建和测试过程。我正在通过外壳程序脚本将Jenkins与Git插件和一些Drush命令一起使用。

在研究如何在我的Drupal开发工作流程中使用Jenkins时,我遇到了一篇有关将Phing与Drush和Jenkins一起使用的文章。因此,我查看了Phing,但看不到通过Shell脚本使用Drush命令无法完成的工作。

我正在尝试决定花时间学习如何使用Phing对我来说是否有意义。我正在寻找一些明确的信息,说明通过Shell脚本合并Phing vs. Drush命令将获得什么好处。

因此,我的问题是那些将Phing与Drush和Jenkins一起使用的人:Drush / Drush-Make和Phing有何不同?您为什么决定在过程中开始使用Phing?

谢谢

Answers:


15

答案是它们肯定不是多余的。

的确,使用包含drush命令(至少是建筑部分)的bash脚本可以完成相同的最终结果。但是,如果我们要做的是将我们的流程集成到JenkinsCI之类的CI框架中,那么就可以使用phing之类的方法(此处可以用ant或capistrano代替)。

通过phing,我们可以将构建过程分解为不同的部分,这些部分可以以智能的方式报告给Jenkins。

例如。假设在构建过程中,我使用drush启用了两个模块,即node和shouldfail。然后构建应该失败。但是,如果我们要做的只是告诉JenkinsCI运行以下shell命令,则JenkinsCI会说生成PASSED:

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蚂蚁和网络钓鱼几乎相同。PHP开发人员使用phing的优势在于,他们可以更轻松地扩展phing。

至于Drupal的开发和完善程度,我认为扩展phing并没有太大的价值,并且认为运行exec任务足以创建一个智能构建模板。

好吧,为了回答我的问题,我最终花了一些时间来找出网络钓鱼。它实际上是非常直观的,不需要花太长时间。


2

现在有一个可用于PhingDrush任务

除了使用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警告进行交互。我最终放弃了它,是因为这个原因,以及我发现它在其他方面有限制的事实。
DKinzer 2012年

最好在其发布队列(drupal.org/project/issues/phingdrushtask)上说明Drush任务在支持或功能请求方面遇到的问题/限制。让其他人找出答案并做出贡献。
皮埃尔·布伊

2

Phing脚本是Shell脚本的替代品,用于控制多个命令的执行及其结果。Drush是一个CLI接口,用于与Drupal站点或与Drupal相关的命令进行交互。他们互相补充。


1

您的问题:Phing和Drush重叠吗?

TLDR;版本: Sorta。但是大多数都没有。

未删节的版本: Drush和phing仅在少数情况下重叠。主要是,转储和存档网站将是较大的重叠之一。您可以在phing中执行此操作,但是您必须编写许多任务。您可以转储数据库,但使用一个命令可以使drush如此轻松。Phing可以做到这一点,但是您只需要编写命令行脚本即可。phing的一大亮点是能够运行phpunit测试,运行外部工具(如压缩您的CSS文件的jar),创建并打包Drupal站点/应用程序的构建等。

什么是网络钓鱼?

Phing本质上是执行命令的飞行员。如果您熟悉Ant,那么Phing实际上是Ant(基于Java的表亲)的近身端口。Phing用PHP编写。

您可以使用Phing自动化任务并根据这些任务报告结果。另一方面,Drush只是执行任务。它无法确定评估输出结果。

phing / 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没有任何关系,但可以使您更好地了解它的工作方式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.