Contents |
FileSyncTask can be used to synchronize Website trees from staging to production servers and to backup key areas of the filesystems.
There are 4 different ways of using FileSyncTask:
development.com
|-- build
| |-- build.properties
| |-- build.xml
| |-- sync.exclude
| `-- sync.properties
`-- public
`-- index.phpThe SSH client called by FileSyncTask uses settings from the sync.properties file:
sync.source.projectdir=/home/development.com/public sync.destination.projectdir=/home/staging.com sync.remote.host=server.com sync.remote.user=user sync.destination.backupdir=/home/staging.com/backup sync.exclude.file=/home/development.com/build/sync.exclude
To exclude files from synchronizations, open and edit the sync.exclude file under the build/ directory. Each line can contain a file, a directory, or a pattern:
*~ _* .svn .htaccess *.development.php public/images/uploads/* build/* log/* tmp/*
Phing uses XML build files that contain a description of the things to do. The build file is structured into targets that contain the actual commands to perform:
<?xml version="1.0" ?> <project name="example" basedir="." default="build"> <property name="version" value="1.0" /> <!-- Public targets --> <target name="sync:list" description="List files"> <phingcall target="-sync-execute-task"> <property name="listonly" value="true" /> </phingcall> </target> <target name="sync" description="Copy files"> <phingcall target="-sync-execute-task"> <property name="listonly" value="false" /> </phingcall> </target> <!-- Private targets --> <target name="-init" description="Load main settings"> <tstamp /> <property file="build.properties" /> </target> <target name="-sync-execute-task" depends="-init"> <property file="sync.properties" /> <if> <not> <isset property="sync.verbose" /> </not> <then> <property name="sync.verbose" value="true" override="true" /> <echo message="The value of sync.verbose has been set to true" /> </then> </if> <property name="sync.remote.auth" value="${sync.remote.user}@${sync.remote.host}" /> <taskdef name="sync" classname="phing.tasks.ext.FileSyncTask" /> <sync sourcedir="${sync.source.projectdir}" destinationdir="${sync.remote.auth}:${sync.destination.projectdir}" backupdir="${sync.remote.auth}:${sync.destination.backupdir}" excludefile="${sync.exclude.file}" listonly="${listonly}" verbose="${sync.verbose}" /> </target> </project>
Execute task:
$ phing sync:list
Output:
Buildfile: /home/development.com/build/build.xml
example > sync:list:
[phingcall] Calling Buildfile '/home/development.com/build/build.xml'
with target '-sync-execute-task'
example > -init:
[property] Loading /home/development.com/build/build.properties
example > -sync-execute-task:
[property] Loading /home/development.com/build/sync.properties
[echo] The value of sync.verbose has been set to true
Execute Command
----------------------------------------
rsync -razv --list-only -b --backup-dir
Sync files to remote server
----------------------------------------
Source: /home/development.com/public
Destination: user@server.com:/home/staging.com
Backup: user@server.com:/home/staging.com/backup
Exclude patterns
----------------------------------------
*~
_*
.svn
.htaccess
*.development.php
public/images/uploads/*
build/*
log/*
tmp/*
(list of files that have changed)
BUILD FINISHED
Total time: 1.9763 second