Transcript
Page 1: Phing all the things

Phing All The Things - Omni Adams

Page 2: Phing all the things

Phing All The Things - Omni Adams

lazydevelopment

Page 3: Phing all the things

Phing All The Things - Omni Adams

Page 4: Phing all the things

Phing All The Things - Omni Adams

Stay DRY

Page 5: Phing all the things

Phing All The Things - Omni Adams

Page 6: Phing all the things

Phing All The Things - Omni Adams

<?xml version="1.0" encoding="UTF-8"?> <project name="phing-the-things" default="test"> <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true" /> </target> </project>

Page 7: Phing all the things

Phing All The Things - Omni Adams

<?xml version="1.0" encoding="UTF-8"?> <project name="phing-the-things" default="test"> <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true" /> </target> </project>

Page 8: Phing all the things

Phing All The Things - Omni Adams

<?xml version="1.0" encoding="UTF-8"?> <project name="phing-the-things" default="test"> <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true" /> </target> </project>

Page 9: Phing all the things

Phing All The Things - Omni Adams

<?xml version="1.0" encoding="UTF-8"?> <project name="phing-the-things" default="test"> <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true" /> </target> </project>

Page 10: Phing all the things

Phing All The Things - Omni Adams

<?xml version="1.0" encoding="UTF-8"?> <project name="phing-the-things" default="test"> <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true" /> </target> </project>

Page 11: Phing all the things

Phing All The Things - Omni Adams

phing-the-things$ phing testBuildfile: /Users/Omni/phing-example/build.xml [property] Loading /Users/Omni/phing-example/build.properties

phing-example > test:

PHPUnit 3.7.13 by Sebastian Bergmann.

Configuration read from /Users/Omni/phing-example/phpunit.xml..............................Time: 0 seconds, Memory: 7.25Mb

OK (30 tests, 52 assertions)

BUILD FINISHEDTotal time: 0.3155 seconds

Page 12: Phing all the things

Phing All The Things - Omni Adams

F.............................Time: 0 seconds, Memory: 7.25Mb

There was 1 failure:

1) GitTest::testGetCommitInfoLOL cats have clogged the tubes!/Users/Omni/phing-example/tests/GitTest.php:51

FAILURES!Tests: 30, Assertions: 51, Failures: 1.Execution of target "test" failed for the following reason: /Users/Omni/phing-example/build.xml:102:46: Task exited with code 1

BUILD FAILED/Users/Omni/phing-example/build.xml:102:46: Task exited with code 1Total time: 0.5653 seconds

Page 13: Phing all the things

Phing All The Things - Omni Adams

<?xml version="1.0" encoding="UTF-8"?> <project name="phing-the-things" default="test"> <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true" /> </target> </project>

Page 14: Phing all the things

Phing All The Things - Omni Adams

<?xml version="1.0" encoding="UTF-8"?> <project name="phing-the-things" default="test"> <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true" /> </target> </project>

Page 15: Phing all the things

Phing All The Things - Omni Adams

F.............................Time: 0 seconds, Memory: 7.25Mb

There was 1 failure:

1) GitTest::testGetCommitInfoLOL cats have clogged the tubes!/Users/Omni/phing-example/tests/GitTest.php:51

FAILURES!Tests: 30, Assertions: 51, Failures: 1.

BUILD FINISHEDTotal time: 0.5619 seconds

Page 16: Phing all the things

Phing All The Things - Omni Adams

Page 17: Phing all the things

Phing All The Things - Omni Adams

● strict● colors● groups● command line flags

Page 18: Phing all the things

Phing All The Things - Omni Adams

<target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true"> <arg value="--exclude-group=integration" /> </exec> </target>

Page 19: Phing all the things

Phing All The Things - Omni Adams

<target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true"> <arg value="${phpunitFlag}" /> </exec> </target>

Page 20: Phing all the things

Phing All The Things - Omni Adams

Page 21: Phing all the things

Phing All The Things - Omni Adams

<property name="test" value="--group=smoke" /> <property name="outputDir" value="./docs" />

Page 22: Phing all the things

Phing All The Things - Omni Adams

phing-the-things$ phing test -DphpunitFlag=--group=smokeBuildfile: /Users/Omni/phing-example/build.xml [property] Loading /Users/Omni/phing-example/build.properties

phing-example > test:PHPUnit 3.7.13 by Sebastian Bergmann.

Configuration read from /Users/Omni/phing-example/phpunit.xml........Time: 0 seconds, Memory: 7.25Mb

OK (8 tests, 12 assertions)

BUILD FINISHEDTotal time: 0.1058 seconds

Page 23: Phing all the things

Phing All The Things - Omni Adams

composer=/opt/composer.phar server1.user=oadams server1.url=www.example.lan <target name="properties-example"> <exec executable="${composer}" /> <exec executable="ssh" passthru="true"> <arg value="-t" /> <arg value="${server1.user}@${server1.url}" /> <arg value="sudo /sbin/service httpd restart" /> </exec> </target>

Page 24: Phing all the things

Phing All The Things - Omni Adams

firstthings fir

st

Page 25: Phing all the things

Phing All The Things - Omni Adams

author=Omni title=Phing All The Things

<property name="author" value="Other Guy" /> <property file="build.properties" /> <property name="title" value="Phing-A-Ling" />

Page 26: Phing all the things

Phing All The Things - Omni Adams

Page 27: Phing all the things

Phing All The Things - Omni Adams

<patternset id="files"> <include name="**/*.php" /> <exclude name="vendor/**" /> </patternset> <target name="phpcs"> <phpcodesniffer standard="./coding_rules.xml" format="full" showWarnings="true"> <fileset dir="."> <patternset refid="files" /> </fileset> </phpcodesniffer> </target>

Page 28: Phing all the things

Phing All The Things - Omni Adams

Page 29: Phing all the things

Phing All The Things - Omni Adams

<target name="document" depends="require-doc"> <mkdir dir="${doc}/api" /> <exec executable="${doc}/api" passthru="true" /> <arg value="--directory=." /> <arg value="--ignore=vendor/*" /> <arg value="--ignore=src/*" /> <arg value="--progressbar" /> <arg value="--target=${doc}/api" /> <arg value="--title=API documentation" /> </exec> </target>

Page 30: Phing all the things

Phing All The Things - Omni Adams

<target name="document" depends="require-doc"> <mkdir dir="${doc}/api" /> <exec executable="${doc}/api" passthru="true" /> <arg value="--directory=." /> <arg value="--ignore=vendor/*" /> <arg value="--ignore=src/*" /> <arg value="--progressbar" /> <arg value="--target=${doc}/api" /> <arg value="--title=API documentation" /> </exec> </target>

Page 31: Phing all the things

Phing All The Things - Omni Adams

<target name="document" depends="require-doc"> <mkdir dir="${doc}/api" /> <exec executable="${doc}/api" passthru="true" /> <arg value="--directory=." /> <arg value="--ignore=vendor/*" /> <arg value="--ignore=src/*" /> <arg value="--progressbar" /> <arg value="--target=${doc}/api" /> <arg value="--title=API documentation" /> </exec> </target>

Page 32: Phing all the things

Phing All The Things - Omni Adams

<target name="document" depends="require-doc"> <mkdir dir="${doc}/api" /> <exec executable="${doc}/api" passthru="true" /> <arg value="--directory=." /> <arg value="--ignore=vendor/*" /> <arg value="--ignore=src/*" /> <arg value="--progressbar" /> <arg value="--target=${doc}/api" /> <arg value="--title=API documentation" /> </exec> </target>

Page 33: Phing all the things

Phing All The Things - Omni Adams

<exec executable="ps" outputProperty="ps-output"> <arg value="x" /> <arg value="|" /> <arg value="grep" /> <arg value="selenium" /> <arg value="|" /> <arg value="grep" /> <arg value="-v" /> <arg value="grep" /> ... </exec>

Page 34: Phing all the things

Phing All The Things - Omni Adams

<exec executable="ps" outputProperty="ps-output"> <arg line="x |grep selen |grep -v 'grep\|phing'" /> </exec>

Page 35: Phing all the things

Phing All The Things - Omni Adams

Page 36: Phing all the things

Phing All The Things - Omni Adams

Page 37: Phing all the things

Phing All The Things - Omni Adams

Page 38: Phing all the things

Phing All The Things - Omni Adams

<target name="build" depends="test" />

<target name="coverage" depends="require-doc" /> <exec executable="phpunit" passthru="true" /> <arg value="--coverage-html=${doc}/coverage" /> <arg value="${phpunitFlag}" /> </exec> </target>

Page 39: Phing all the things

Phing All The Things - Omni Adams

<target name="require-doc"> <if> <not> <isset property="doc" /> </not> <then> <fail name="doc isn't set in .properties file" /> </then> </if> </target>

Page 40: Phing all the things

Phing All The Things - Omni Adams

<property name="foo" value="not-test" /> <target name="example" depends="other-task"> <phingcall target="other-task"> <property name="foo" depends="test" /> <property name="bar" depends="test" /> </phingcall> <phingcall target="other-task" /> </target> <target name="other-task"> <echo message="${foo}" /> <echo message="${bar}" /> </target>

Page 41: Phing all the things

Phing All The Things - Omni Adams

Page 42: Phing all the things

Phing All The Things - Omni Adams

<uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>

Page 43: Phing all the things

Phing All The Things - Omni Adams

<uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>

Page 44: Phing all the things

Phing All The Things - Omni Adams

<uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>

Page 45: Phing all the things

Phing All The Things - Omni Adams

<uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>

Page 46: Phing all the things

Phing All The Things - Omni Adams

<uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>

Page 47: Phing all the things

Phing All The Things - Omni Adams

<uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate> <target name="compile-css" unless="css-compiled"> <exec executable="lessc" passthru="true" checkreturn="true"> <arg value="-x" /> <arg value="styles/*less" /> <arg value="style.css" /> </exec> </target>

Page 48: Phing all the things

Phing All The Things - Omni Adams

Page 49: Phing all the things

Phing All The Things - Omni Adams

<available property="composer-exists" file="composer.phar" /> <target name="get-composer" unless="composer-exists"> <exec executable="curl" output="composer.php"> <arg value="-sS" /> <arg value="https://getcomposer.org/installer" /> <arg value="|" /> <arg value="php" /> </exec> <chmod file="composer.phar" perm="664" /> </target>

Page 50: Phing all the things

Phing All The Things - Omni Adams

<available property="composer-exists" file="composer.phar" /> <target name="get-composer" unless="composer-exists"> <exec executable="curl" output="composer.php"> <arg value="-sS" /> <arg value="https://getcomposer.org/installer" /> <arg value="|" /> <arg value="php" /> </exec> <chmod file="composer.phar" perm="775" /> </target>

Page 51: Phing all the things

Phing All The Things - Omni Adams

Page 52: Phing all the things

Phing All The Things - Omni Adams

Page 53: Phing all the things

Phing All The Things - Omni Adams

ASS

UMPTIONS

Page 54: Phing all the things

Phing All The Things - Omni Adams

Page 55: Phing all the things

Phing All The Things - Omni Adams

Page 56: Phing all the things

Phing All The Things - Omni Adams

Page 57: Phing all the things

Phing All The Things - Omni Adams

<target name="tag" depends="require-version"> <gittag annotate="true" name="${version}" repository="." message="Tagged version ${version}" /> <gitpush repository="." tags="true" quiet="true" /> </target>

Page 58: Phing all the things

Phing All The Things - Omni Adams

phing-the-things$ phing tagBuildfile: /Users/Omni/Sites/phing/build.xml [property] Loading /Users/Omni/Sites/phing/build.properties

phing-the-things > require-version:

[if] Error in IfTaskExecution of target "require-version" failed for the following reason: /Users/Omni/Sites/phing/build.xml:146:12: /Users/Omni/Sites/phing/build.xml:150:18: You must pass in a version: -Dversion=1.2.3BUILD FAILED/Users/Omni/Sites/phing/build.xml:146:12: /Users/Omni/Sites/phing/build.xml:150:18: You must pass in a version: -Dversion=1.2.3Total time: 1.5921 second

Page 59: Phing all the things

Phing All The Things - Omni Adams

phing-the-things$ phing tag-no-versionBuildfile: /Users/Omni/Sites/phing/build.xml [property] Loading /Users/Omni/Sites/phing/build.properties

phing-the-things > tag-no-version:

[gittag] git-tag command: /usr/bin/git tag -a -m'Tagged version ${version}' '${version}' [gittag] git-tag: tags for "." repository [gittag] git-tag output:

BUILD FINISHED

Total time: 0.2039 seconds

phing-the-things $ git tag${version}

Page 60: Phing all the things

Phing All The Things - Omni Adams

<target name="tag-version"> <version releasetype="${release}" file="version.txt" property="version" /> <exec executable="git" passthru="true"> <arg line="add version.txt" /> </exec> <exec executable="git" passthru="true"> <arg line="commit -m 'Updated version file to ${version}'" /> </exec> <gittag annotate="true" name="${version}" repository="." message="Tagged version ${version}" /> </target>

Page 61: Phing all the things

Phing All The Things - Omni Adams

<target name="tag-version"> <version releasetype="${release}" file="version.txt" property="version" /> <exec executable="git" passthru="true"> <arg line="add version.txt" /> </exec> <exec executable="git" passthru="true"> <arg line="commit -m 'Updated version file to ${version}'" /> </exec> <gittag annotate="true" name="${version}" repository="." message="Tagged version ${version}" /> </target>

Page 62: Phing all the things

Phing All The Things - Omni Adams

<target name="tag-version"> <version releasetype="${release}" file="version.txt" property="version" /> <exec executable="git" passthru="true"> <arg line="add version.txt" /> </exec> <exec executable="git" passthru="true"> <arg line="commit -m 'Updated version file to ${version}'" /> </exec> <gittag annotate="true" name="${version}" repository="." message="Tagged version ${version}" /> </target>

Page 63: Phing all the things

Phing All The Things - Omni Adams

<target name="tag-version"> <version releasetype="${release}" file="version.txt" property="version" /> <exec executable="git" passthru="true"> <arg line="add version.txt" /> </exec> <exec executable="git" passthru="true"> <arg line="commit -m 'Updated version file to ${version}'" /> </exec> <gittag annotate="true" name="${version}" repository="." message="Tagged version ${version}" /> </target>

Page 64: Phing all the things

Phing All The Things - Omni Adams

<target name="tag-version"> <version releasetype="${release}" file="version.txt" property="version" /> <exec executable="git" passthru="true"> <arg line="add version.txt" /> </exec> <exec executable="git" passthru="true"> <arg line="commit -m 'Updated version file to ${version}'" /> </exec> <gittag annotate="true" name="${version}" repository="." message="Tagged version ${version}" /> </target>

Page 65: Phing all the things

Phing All The Things - Omni Adams

phing-the-things$ phing tag-version -Drelease=minorBuildfile: /Users/Omni/Sites/phing/build.xml [property] Loading /Users/Omni/Sites/phing/build.properties

phing-the-things > tag-version:

[master 4b48e9f] Updated version file to 0.1.0 1 file changed, 1 insertion(+), 1 deletion(-) [gittag] git-tag command: /usr/bin/git tag -a -m'Tagged version 0.1.0' '0.1.0' [gittag] git-tag: tags for "." repository [gittag] git-tag output:

BUILD FINISHEDTotal time: 0.3507 seconds

phing-the-things $ git tag0.0.10.1.0

Page 66: Phing all the things

Phing All The Things - Omni Adams

<target name="release-major"> <phingcall target="tag-version"> <property name="release" value="major" /> </phingcall> </target>

<target name="release-minor"> <phingcall target="tag-version"> <property name="release" value="minor" /> </phingcall> </target>

Page 67: Phing all the things

Phing All The Things - Omni Adams

<target name="tag-svn"> <svncopy svnpath="${svnpath}" username="${svnuser}" password="${svnpass}" nocache="true" repositoryurl="svn://localhost/phing-the-things/trunk/" todir="svn://localhost/phing-the-things/tags/${version}" /> </target>

Page 68: Phing all the things

Phing All The Things - Omni Adams

<target name="tag-version-no-file"> <exec executable="git" outputProperty="latest-version"> <arg line="tag | sort -t. -k 1,1n -k 2,2n -k 3,3n | tail -1" /> </exec> <echo file="v.txt">${latest-version}</echo> <version releasetype="${release}" file="v.txt" property="version" /> <delete file="v.txt" /> <gittag annotate="true" name="${version}" repository="." message="Tagged version ${version}" /> </target>

Page 69: Phing all the things

Phing All The Things - Omni Adams

<property name="build-url" value="https://jenkins/job/phing/lastBuild/api/json" /> <target name="require-green-build-check"> <exec executable="curl" outputProperty="status"> <arg line='--silent ${build-url} |grep result |cut -d" -f4' /> </exec> <if> <not><equals arg1="${status}" arg2="SUCCESS" /></not> <then><fail message="Jenkins build is broken" /></then> </if> </target>

Page 70: Phing all the things

Phing All The Things - Omni Adams

<target name="deploy"> <phingcall target="require-release" /> <phingcall target="require-green-build-check" /> <phingcall target="tag-version-no-file" /> </target>

Page 71: Phing all the things

Phing All The Things - Omni Adams

Page 72: Phing all the things

Phing All The Things - Omni Adams

<target name="prepare"> <gitclone repository="git://server/phing-things.git" targetPath="build" /> <gitcheckout repository="build" branchname="${version}" quiet="true" /> <delete dir="build/tests" /> <delete file="build/build.xml" /> <tar destfile="build-${version}.tar.bz2" basedir="build" includeemptydir="true" compression="bzip2" /> <delete dir="build" /> </target>

Page 73: Phing all the things

Phing All The Things - Omni Adams

<target name="deploy"> <phingcall target="require-release" /> <phingcall target="require-green-build-check" /> <phingcall target="tag-version-no-file" /> <phingcall target="prepare" /> </target>

Page 74: Phing all the things

Phing All The Things - Omni Adams

<target name="upload"> <exec executable="scp" checkreturn="true"> <arg value="build-${version}.tar.bz2" /> <arg value="${server}:/var/www/" /> </exec> <exec executable="ssh" checkreturn="true" passthru="true"> <arg value="${server}" /> <arg value="cd /var/www;tar -xjf build-${version}.tar.bz2" /> </exec> </target>

Page 75: Phing all the things

Phing All The Things - Omni Adams

<target name="deploy"> <phingcall target="require-release" /> <phingcall target="require-green-build-check" /> <phingcall target="tag-version-no-file" /> <phingcall target="prepare" /> <phingcall target="upload" /> </target>

Page 76: Phing all the things

Phing All The Things - Omni Adams

<target name="go-live" depends="require-version"> <exec executable="ssh" checkreturn="true" passthru="true"> <arg value="${server}" /> <arg value="cd /var/www; ln -sf build-${version} app" /> </exec> </target>

Page 77: Phing all the things

Phing All The Things - Omni Adams

<target name="deploy"> <phingcall target="require-release" /> <phingcall target="require-green-build-check" /> <phingcall target="tag-version-no-file" /> <phingcall target="prepare" /> <phingcall target="upload" /> <phingcall target="go-live" /> </target>

Page 78: Phing all the things

Phing All The Things - Omni Adams

San

ityC

hec

k

Page 79: Phing all the things

Phing All The Things - Omni Adams

Page 80: Phing all the things

Phing All The Things - Omni Adams

phing-the-things$ phing go-live -Dversion=1.2.3

Page 81: Phing all the things

Phing All The Things - Omni Adams

phing-the-things$ phing go-live -Dversion=1.2.3

Page 82: Phing all the things

Phing All The Things - Omni Adams

!$monitored == !$exist

Page 83: Phing all the things

Phing All The Things - Omni Adams

Page 84: Phing all the things

Phing All The Things - Omni Adams

<?php require_once 'phing/Task.php'; class UpdateNewRelicTask extends Task { public function init() { // Runs when task is imported } public function main() { // Runs when task is executed } }

Page 85: Phing all the things

Phing All The Things - Omni Adams

<taskdef name="newrelic" classname="UpdateNewRelicTask" /> <target name="update-new-relic"> <newrelic /> </target>

Page 86: Phing all the things

Phing All The Things - Omni Adams

<taskdef name="newrelic" classname="UpdateNewRelicTask" /> <target name="update-new-relic"> <newrelic /> </target>

Page 87: Phing all the things

Phing All The Things - Omni Adams

class UpdateNewRelicTask extends Task { protected $version;

public function setVersion($version) { $this->version = $version; } }

Page 88: Phing all the things

Phing All The Things - Omni Adams

<target name="update-new-relic"> <newrelic version="${version}" /> </target>

Page 89: Phing all the things

Phing All The Things - Omni Adams

public function main() { $options = array( CURLOPT_POSTFIELDS => array( 'deployment[application_id]' => $this->appId, 'deployment[description]' => $this->version ), CURLOPT_HTTPHEADER => array( 'x-api-key: ' . $this->apiKey ), CURLOPT_URL => $this->url, ); ...}

Page 90: Phing all the things

Phing All The Things - Omni Adams

public function main() { ... $ch = curl_init(); curl_setopt_array($ch, $options); curl_exec($ch); curl_close($ch);}

Page 91: Phing all the things

Phing All The Things - Omni Adams

Page 92: Phing all the things

Phing All The Things - Omni Adams

Page 93: Phing all the things

Phing All The Things - Omni Adams

• Omni Adams• @omnicolor• http://omni-spot.blogspot.com• [email protected]• https://joind.in/11182


Top Related