ANT Script to Deploy
A friend of mine asked me to post a simple script to show the power of ANT. Here it is with comments that show some of the things you can do with it. To read how to set up ANT and run scripts, please read my earlier post on doing so.
This script gets the latest from an SVN repo, deploys using FTP, then sends an email using a Gmail account. Here’s the ant script (deploy.ant), followed by a properties file (i.e. the config file, deploy.properties), which the ANT script pulls from:
<?xml version="1.0"?> <!-- ======================================================== --> <!-- Sample build file used to retrieve svnant's sources --> <!-- ======================================================== --> <!-- TODO: Mail if the script failed --> <project name="STAGING-Deploy" basedir="." default="empty"> <property file="STAGING-Deploy.properties" /> <!-- Import SVNAnt tasks from jar files. --> <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" /> <target name="Deploy"> <!-- Step 1: Export the latest files from the repo to local machine. --> <antcall target="export" /> <!-- Step 2: FTP the files from the local machine to STAGING. --> <antcall target="ftp_files" /> <!-- Step 3: Cleanup. --> <antcall target="cleanup" /> </target> <!-- SVN Checkout (Latest) --> <target name="checkout_latest"> <svn username="${svnant.repository.user}" password="${svnant.repository.passwd}"> <checkout url="${svnant.projectrunk.url}" revision="${svnant.checkout.revision}" destPath="${svnant.checkout.destpath}" /> </svn> </target> <!-- SVN Update --> <target name="update_latest"> <svn username="${svnant.repository.user}" password="${svnant.repository.passwd}"> <update dir="${svnant.update.directory}" recurse="${svnant.update.recurse}" revision="${svnant.update.revision}" /> </svn> </target> <!-- SVN Export --> <target name="export"> <svn username="${svnant.repository.user}" password="${svnant.repository.passwd}"> <export srcUrl="${svnant.export.srcurl}" destPath="${svnant.export.destpath}" force="${svnant.export.force}" /> </svn> </target> <!-- FTP the export of the latest revision to STAGING. --> <target name="ftp_files"> <!-- Import FTP tasks from jar files. --> <taskdef classname="org.apache.tools.ant.taskdefs.optional.net.FTP" name="ftp" /> <ftp server="${ftp.server}" port="${ftp.port}" remotedir="${ftp.destination}" userid="${ftp.userid}" password="${ftp.password}" passive="${ftp.passive}" depends="${ftp.depends}" binary="${ftp.binary}" retriesAllowed="${ftp.retriesallowed}" verbose="${ftp.verbose}"> <fileset dir="${svnant.export.destpath}" /> </ftp> </target> <!-- Cleans Up: Remove temp info, etc. --> <target name="cleanup"> <delete includeEmptyDirs="true"> <fileset dir="${svnant.export.destpath}"/> </delete> <!-- Email Notification --> <mail mailhost="${mail.host}" mailport="${mail.port}" subject="${mail.subjectalert}" ssl="${mail.ssl}" user="${mail.username}" password="${mail.password}"> <from address="${mail.from}"/> <to address="${mail.to}"/> <message>The nightly build has completed.</message> </mail> <echo>Cleanup complete. </echo> </target> <target name="empty"> <echo>Pass in a default target to call </echo> </target> </project>
Now let’s check out the properties file (deploy.properties):
# ----------------------------------------------------------------------------- # STAGING-DEPLOY # Variables are initialized here. # ----------------------------------------------------------------------------- # # NOTE: Backslashes have to be escaped with another backslash (on Windows) # # === INIT ===================================================================== svnant.projectrunk.url=svn://192.168.3.142/TESTING/trunk svnant.repository.user=YOURUSERNAME svnant.repository.passwd=YOURPASSWORD # === CHECKOUT (INITIAL) ======================================================= # Check out a working copy of the latest to a local directory. svnant.checkout.destpath=C:\\testing123 svnant.checkout.revision=HEAD # === UPDATE TO LATEST ========================================================= # Update the working copy of your local directory to latest revision svnant.update.directory=C:\\Experiments\\Firehawk\\src_latest svnant.update.revision=HEAD svnant.update.recurse=true # === EXPORT =================================================================== # Copies From Source Repo: svnant.export.srcurl=${svnant.projectrunk.url} # Into a temporary directory in your ant home (that will be FTP'd): svnant.export.destpath=${ant.home}\\export-temp # Overwrite (needs to in case the file changed)? svnant.export.force=true PBNStagingFTP # == FTP INFO ================================================================== # FTP what was exported (latest version) to this location on staging: ftp.destination=/testing/ ftp.server=TESTING ftp.port=21 ftp.userid=USERNAME ftp.password=PASSWORD ftp.passive=yes ftp.depends=yes ftp.binary=yes ftp.retriesallowed=5 ftp.verbose=yes # == MAIL INFO ================================================================== # Currently using GMAIL for now. mail.host=smtp.gmail.com mail.port=465 mail.subjectalert=[STAGING ANT Build] Test build mail.ssl=yes mail.username=USERNAME mail.password=PASSWORD mail.from=someone@somewhere.com mail.to=someone@somewhere.com
Categories