使用Phing从SVN部署PHP项目

使用Phing进行自动构建使部署到服务器变得轻松而轻松,如果您使用SVN作为源代码控制系统,则可以轻松地从存储库直接部署到Web服务器。

要允许Phing利用SVN服务器,必须首先安装VersionControl_SVN pear库。尽管这是Alpha版本,但我已经使用了很多,没有任何问题。唯一的事情是,如果要安装它,则需要指定pear的版本号,如下所示:

pear install VersionControl_SVN-0.3.4

要使Phing从SVN存储库中导出,可以使用svnexport任务。以下构建文件设置了一些参数(供此任务使用),运行一个目标以删除现有的导出,然后运行一个目标,该目标从我们已设置的SVN存储库中导出。

<?xml version="1.0"?>
<project name="build" default="main">
 
    <property name="exportdir"  value="./svn_export/" />
    <property name="svnpath" value="/usr/bin/svn" />
    <property name="username" value="username" />
    <property name="password" value="password" />
    <property name="repo" value="http://www.yoursvnserver.com/yoursvnrepo" />
    <property name="revision" value="HEAD" />
 
    <target name="main">
        <phingcall target="svnexport" />  
    </target>
 
    <target name="clean">
        <delete dir="${exportdir}"/>
    </target>  
 
    <target name="svnexport" depends="clean">
        <svnexport
            repositoryurl="${repo}"
            todir="${exportdir}"
            svnpath="${svnpath}"
            username="${username}"
            password="${password}"
            nocache="true"
            revision="${revision}"
        />
    </target>
</project>

如果保存此构建文件,则svnexport.xml可以使用以下命令运行它:

phing -f svnexport.xml

svnexport任务可用的大多数参数都是自解释性的。Nocahce是唯一可能不会立即显而易见的,它将缓存请求之间的连接凭据。另外,如果要使用匿名SVN服务器,则只需忽略用户名和密码参数即可。在Phing站点上svnexport上有可用的文档。

如果您发现(像我一样)该脚本存在并且给出了一个错误,该错误说明了不存在的svnexport任务,请确保您的Phing版本是最新的,并且应该可以解决该问题。这可以通过运行pear升级或pear升级phing来完成。

对于奖励积分,我们可以仅提取所需的修订,而不必总是使用HEAD进行默认设置或每次我们要更改构建文件时都必须对其进行编辑。这可以通过在运行时将参数传递给Phing来完成,也可以通过在运行构建文件时使用propertyprompt任务向用户询问修订号来完成。

您可以在运行时通过调用Phing时使用-D标志来更改修订版参数。以下将版本参数设置为2。

phing -Drevision=2 -f svnexport.xml

然后,您可以在构建文件中添加echo语句,以便打印出从命令行接收到的修订。

    <target name="main">
        <echo>Extracting revision ${revision}</echo>   
        <phingcall target="svnexport" />  
    </target>

要使用propertyprompt任务,只需将其添加到svnexport任务上方。在下面的示例中,我更改了我的主要目标,以在运行其他任何操作之前添加propertyprompt任务。

    <target name="main">
        <propertyprompt propertyName="revision" defaultValue="HEAD" promptText="Enter revision number" />
        <echo>Extracting revision ${revision}</echo>   
        <phingcall target="svnexport" />  
    </target>

当您像以前一样运行构建文件时,脚本将停止,并在屏幕上显示提示,询问您要提取的修订号。

Enter revision number [HEAD] ?

导出后,您可以运行其他目标以将其移至FTP服务器或使用它进行任何操作,完成操作后甚至可以清理导出目录。在构建的应用程序中放置一个包含修订信息的小文件也是一个想法,这样您就可以检查用于制作该应用程序的修订版本。

Phing还可以使用其他版本控制系统(例如CVS和Git),因此,如果您不使用SVN,则始终可以修改脚本以包括您选择的存储库系统。