Created
September 12, 2016 00:08
-
-
Save ericmdev/a1de6ccca170c9906778a9faa030af9c to your computer and use it in GitHub Desktop.
A base phing build file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
remote.user = | |
remote.host = | |
remote.deploy-directory = | |
release.branch = master | |
git.repository-url = | |
ssh.public-key = | |
ssh.private-key = |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<project name="Project Name" basedir="." default=""> | |
<resolvepath propertyName="project.path" file="." /> | |
<target name="init" hidden="true"> | |
<tstamp> | |
<format property="TSTAMP" pattern="%s" /> | |
</tstamp> | |
<property name="builddir" value="${project.path}/build" /> | |
<if> | |
<isset property="environment" /> | |
<else> | |
<property name="environment" value="develop" /> | |
</else> | |
</if> | |
<if> | |
<available file="${project.path}/build.${environment}.properties" /> | |
<then> | |
<property file="build.${environment}.properties" /> | |
</then> | |
<else> | |
<property file="build.properties" /> | |
</else> | |
</if> | |
</target> | |
<target name="clean" depends="init" description="Cleans the build directory and prepares it for a new build."> | |
<if> | |
<isset property="clean.path" /> | |
<then> | |
<delete dir="${clean.path}" quiet="true" /> | |
<mkdir dir="${clean.path}" /> | |
</then> | |
<else> | |
<delete dir="${builddir}" quiet="true" /> | |
<mkdir dir="${builddir}" /> | |
</else> | |
</if> | |
</target> | |
<target name="rollback" depends="init" description="Rollback release to previous version"> | |
<if> | |
<and> | |
<available file="${builddir}/previous-version" /> | |
<not> | |
<isset property="release" /> | |
</not> | |
</and> | |
<then> | |
<loadfile property="release" file="${builddir}/previous-version" /> | |
</then> | |
<else> | |
<ssh | |
username="${remote.user}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
host="${remote.host}" | |
command="ls -1 '${remote.deploy-directory}/' | tail -n+2" | |
display="false" | |
property="available-releases" | |
/> | |
<echo msg="Available releases to rollback to:" /> | |
<echo msg="${available-releases}" /> | |
<propertyprompt | |
propertyName="release" | |
promptText="Which release to rollback to" | |
/> | |
</else> | |
</if> | |
<trycatch property="fatal-error"> | |
<try> | |
<ssh | |
username="${remote.user}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
host="${remote.host}" | |
command="[ -d '${remote.deploy-directory}/${release}' ] || return 1" | |
failonerror="true" | |
/> | |
</try> | |
<catch> | |
<fail message="Could not find release '${release}' on remote server. Exiting." /> | |
</catch> | |
</trycatch> | |
<phingcall target="remote:symlink-relative"> | |
<property name="link" value="current" /> | |
<property name="dir" value="${remote.deploy-directory}" /> | |
<property name="todir" value="${release}" /> | |
</phingcall> | |
</target> | |
<target name="deploy" depends="init" description="Deploys application to environment."> | |
<propertyprompt | |
propertyName="release.branch" | |
defaultValue="master" | |
promptText="Which branch to build release" | |
useExistingValue="true" | |
/> | |
<propertyprompt | |
propertyName="release.name" | |
defaultValue="${release.branch}.${TSTAMP}" | |
useExistingValue="true" | |
promptText="Name for this release" | |
/> | |
<property name="build.path" value="${builddir}/${release.name}" /> | |
<phingcall target="clean"> | |
<property name="clean.path" value="${build.path}" /> | |
</phingcall> | |
<echo msg="Building new release." /> | |
<phingcall target="git-clone"> | |
<property name="dir" value="${build.path}" /> | |
<property name="branch" value="${release.branch}" /> | |
<property name="repository" value="${git.repository-url}" /> | |
</phingcall> | |
<phingcall target="git-submodule"> | |
<property name="dir" value="${build.path}" /> | |
</phingcall> | |
<phingcall target="archive"> | |
<property name="dir" value="${build.path}" /> | |
<property name="name" value="${release.name}" /> | |
<property name="filenamepath" value="${build.path}/${release.name}.tar.gz" /> | |
</phingcall> | |
<echo msg="Copying release to remote host." /> | |
<phingcall target="copy-to-remote"> | |
<property name="file" value="${build.path}/${release.name}.tar.gz" /> | |
</phingcall> | |
<phingcall target="remote:untar"> | |
<property name="file" value="${remote.deploy-directory}/${release.name}.tar.gz" /> | |
<property name="dir" value="${remote.deploy-directory}/" /> | |
</phingcall> | |
<echo msg="Moving the active release symlink to this release on remote host." /> | |
<phingcall target="remote:symlink-relative"> | |
<property name="link" value="current" /> | |
<property name="dir" value="${remote.deploy-directory}" /> | |
<property name="todir" value="${release.name}" /> | |
</phingcall> | |
<phingcall target="remote:clean"> | |
<property name="file" value="${remote.deploy-directory}/${release.name}.tar.gz" /> | |
</phingcall> | |
<delete file="${builddir}/previous-version" quiet="true" /> | |
<php function="file_put_contents"> | |
<param value="${builddir}/previous-version" /> | |
<param value="${release.name}" /> | |
</php> | |
<echo msg="Deployment of release '${release.name}' is complete." /> | |
</target> | |
<target name="setup-dev" depends="init"> | |
<propertyprompt | |
propertyName="develop-branch" | |
defaultValue="develop" | |
useExistingValue="true" | |
promptText="Branch to checkout for development" | |
/> | |
<phingcall target="git-checkout"> | |
<property name="branch" value="${develop-branch}" /> | |
<property name="dir" value="${project.path}" /> | |
</phingcall> | |
<phingcall target="git-submodule"> | |
<property name="dir" value="${project.path}" /> | |
</phingcall> | |
</target> | |
<target name="git-clone" hidden="true"> | |
<exec | |
command="git clone -b ${branch} ${repository} ${dir}" | |
passthru="true" | |
/> | |
</target> | |
<target name="git-checkout" hidden="true"> | |
<exec | |
returnProperty="git-checkout-branch-exists" | |
command="git show-ref --quiet --verify -- 'refs/remotes/origin/${branch}'" | |
dir="${dir}" | |
passthru="true" | |
/> | |
<if> | |
<equals arg1="${git-checkout-branch-exists}" arg2="0" /> | |
<then> | |
<exec | |
command="git checkout --track -b ${branch} origin/${branch}" | |
dir="${dir}" | |
passthru="true" | |
/> | |
</then> | |
<else> | |
<exec | |
command="git checkout -b ${branch}" | |
dir="${dir}" | |
passthru="true" | |
/> | |
</else> | |
</if> | |
</target> | |
<target name="git-submodule" hidden="true"> | |
<exec | |
command="git submodule update --init --recursive" | |
dir="${dir}" | |
passthru="true" | |
/> | |
</target> | |
<target name="archive" hidden="true"> | |
<tar | |
destfile="${filenamepath}" | |
compression="gzip" | |
includeemptydirs="true" | |
prefix="${name}" | |
> | |
<fileset dir="${dir}"> | |
<include name="**/**" /> | |
<!-- Build related files. --> | |
<exclude name="build.xml" /> | |
<exclude name="phpunit.xml" /> | |
<exclude name="build.properties" /> | |
<!-- VCS related files. --> | |
<exclude name="**/.git/**" /> | |
<exclude name="**/.git*" /> | |
<exclude name="**/.svn/**" /> | |
<exclude name="**/.svn*" /> | |
</fileset> | |
</tar> | |
</target> | |
<target name="copy-to-remote" hidden="true"> | |
<scp | |
username="${remote.user}" | |
host="${remote.host}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
file="${file}" | |
todir="${remote.deploy-directory}" | |
/> | |
</target> | |
<target name="remote:untar" hidden="true"> | |
<ssh | |
username="${remote.user}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
host="${remote.host}" | |
command="tar -xzf '${file}' -C '${dir}'" | |
/> | |
</target> | |
<target name="remote:symlink-relative" hidden="true"> | |
<ssh | |
username="${remote.user}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
host="${remote.host}" | |
command="cd '${dir}' && rm -f '${link}' && ln -s -f '${todir}' '${link}'" | |
/> | |
</target> | |
<target name="remote:symlink" hidden="true"> | |
<ssh | |
username="${remote.user}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
host="${remote.host}" | |
command="rm -f '${link}'; ln -s -f '${todir}' '${link}'" | |
/> | |
</target> | |
<target name="remote:clean" hidden="true"> | |
<ssh | |
username="${remote.user}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
host="${remote.host}" | |
command="rm -f '${file}'" | |
/> | |
<ssh | |
username="${remote.user}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
host="${remote.host}" | |
command="rm -rf `find '${remote.deploy-directory}/*' -maxdepth 0 -mindepth 0 -type d | sort -r | tail -n+6`" | |
/> | |
</target> | |
<target name="remote:copy" hidden="true"> | |
<ssh | |
username="${remote.user}" | |
pubkeyfile="${ssh.public-key}" | |
privkeyfile="${ssh.private-key}" | |
host="${remote.host}" | |
command="cp '${file}' '${destination}'" | |
/> | |
</target> | |
</project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment