Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
lazy
development
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
Stay DRY
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<?xml version="1.0" encoding="UTF-8"?>
<project name="phing-the-things" default="test">
...
Phing All The Things - Omni Adams
<?xml version="1.0" encoding="UTF-8"?>
<project name="phing-the-things" default="test">
...
Phing All The Things - Omni Adams
<?xml version="1.0" encoding="UTF-8"?>
<project name="phing-the-things" default="test">
...
Phing All The Things - Omni Adams
<?xml version="1.0" encoding="UTF-8"?>
<project name="phing-the-things" default="test">
...
Phing All The Things - Omni Adams
<?xml version="1.0" encoding="UTF-8"?>
<project name="phing-the-things" default="test">
...
Phing All The Things - Omni Adams
phing-the-things$ phing test
Buildfile: /Users/Omni/phing-example/build.xml
[property] L...
Phing All The Things - Omni Adams
F.............................
Time: 0 seconds, Memory: 7.25Mb
There was 1 failure:
1) G...
Phing All The Things - Omni Adams
<?xml version="1.0" encoding="UTF-8"?>
<project name="phing-the-things" default="test">
...
Phing All The Things - Omni Adams
<?xml version="1.0" encoding="UTF-8"?>
<project name="phing-the-things" default="test">
...
Phing All The Things - Omni Adams
F.............................
Time: 0 seconds, Memory: 7.25Mb
There was 1 failure:
1) G...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
● strict
● colors
● groups
● command line flags
Phing All The Things - Omni Adams
<target name="test">
<exec executable="phpunit" passthru="true"
checkreturn="true">
<arg...
Phing All The Things - Omni Adams
<target name="test">
<exec executable="phpunit" passthru="true"
checkreturn="true">
<arg...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<property name="test" value="--group=smoke" />
<property name="outputDir" value="./docs"...
Phing All The Things - Omni Adams
phing-the-things$ phing test -DphpunitFlag=--group=smoke
Buildfile: /Users/Omni/phing-ex...
Phing All The Things - Omni Adams
composer=/opt/composer.phar
server1.user=oadams
server1.url=www.example.lan
<target name...
Phing All The Things - Omni Adams
things
Phing All The Things - Omni Adams
author=Omni
title=Phing All The Things
<property name="author" value="Other Guy" />
<pro...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<patternset id="files">
<include name="**/*.php" />
<exclude name="vendor/**" />
</patte...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<target name="document" depends="require-doc">
<mkdir dir="${doc}/api" />
<exec executab...
Phing All The Things - Omni Adams
<target name="document" depends="require-doc">
<mkdir dir="${doc}/api" />
<exec executab...
Phing All The Things - Omni Adams
<target name="document" depends="require-doc">
<mkdir dir="${doc}/api" />
<exec executab...
Phing All The Things - Omni Adams
<target name="document" depends="require-doc">
<mkdir dir="${doc}/api" />
<exec executab...
Phing All The Things - Omni Adams
<exec executable="ps" outputProperty="ps-output">
<arg value="x" />
<arg value="|" />
<a...
Phing All The Things - Omni Adams
<exec executable="ps" outputProperty="ps-output">
<arg line="x |grep selen |grep -v 'gre...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<target name="build" depends="test" />
<target name="coverage" depends="require-doc" />
...
Phing All The Things - Omni Adams
<target name="require-doc">
<if>
<not>
<isset property="doc" />
</not>
<then>
<fail name...
Phing All The Things - Omni Adams
<property name="foo" value="not-test" />
<target name="example" depends="other-task">
<p...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<uptodate property="css-compiled" targetfile="style.css">
<srcfiles dir="styles" include...
Phing All The Things - Omni Adams
<uptodate property="css-compiled" targetfile="style.css">
<srcfiles dir="styles" include...
Phing All The Things - Omni Adams
<uptodate property="css-compiled" targetfile="style.css">
<srcfiles dir="styles" include...
Phing All The Things - Omni Adams
<uptodate property="css-compiled" targetfile="style.css">
<srcfiles dir="styles" include...
Phing All The Things - Omni Adams
<uptodate property="css-compiled" targetfile="style.css">
<srcfiles dir="styles" include...
Phing All The Things - Omni Adams
<uptodate property="css-compiled" targetfile="style.css">
<srcfiles dir="styles" include...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<available property="composer-exists" file="composer.phar" />
<target name="get-composer...
Phing All The Things - Omni Adams
<available property="composer-exists" file="composer.phar" />
<target name="get-composer...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
ASSUMPTIONS
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<target name="tag" depends="require-version">
<gittag annotate="true" name="${version}" ...
Phing All The Things - Omni Adams
phing-the-things$ phing tag
Buildfile: /Users/Omni/Sites/phing/build.xml
[property] Load...
Phing All The Things - Omni Adams
phing-the-things$ phing tag-no-version
Buildfile: /Users/Omni/Sites/phing/build.xml
[pro...
Phing All The Things - Omni Adams
<target name="tag-version">
<version releasetype="${release}" file="version.txt"
propert...
Phing All The Things - Omni Adams
<target name="tag-version">
<version releasetype="${release}" file="version.txt"
propert...
Phing All The Things - Omni Adams
<target name="tag-version">
<version releasetype="${release}" file="version.txt"
propert...
Phing All The Things - Omni Adams
<target name="tag-version">
<version releasetype="${release}" file="version.txt"
propert...
Phing All The Things - Omni Adams
<target name="tag-version">
<version releasetype="${release}" file="version.txt"
propert...
Phing All The Things - Omni Adams
phing-the-things$ phing tag-version -Drelease=minor
Buildfile: /Users/Omni/Sites/phing/b...
Phing All The Things - Omni Adams
<target name="release-major">
<phingcall target="tag-version">
<property name="release" ...
Phing All The Things - Omni Adams
<target name="tag-svn">
<svncopy svnpath="${svnpath}" username="${svnuser}"
password="${...
Phing All The Things - Omni Adams
<target name="tag-version-no-file">
<exec executable="git" outputProperty="latest-versio...
Phing All The Things - Omni Adams
<property name="build-url"
value="https://jenkins/job/phing/lastBuild/api/json" />
<targ...
Phing All The Things - Omni Adams
<target name="deploy">
<phingcall target="require-release" />
<phingcall target="require...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<target name="prepare">
<gitclone repository="git://server/phing-things.git"
targetPath=...
Phing All The Things - Omni Adams
<target name="deploy">
<phingcall target="require-release" />
<phingcall target="require...
Phing All The Things - Omni Adams
<target name="upload">
<exec executable="scp" checkreturn="true">
<arg value="build-${ve...
Phing All The Things - Omni Adams
<target name="deploy">
<phingcall target="require-release" />
<phingcall target="require...
Phing All The Things - Omni Adams
<target name="go-live" depends="require-version">
<exec executable="ssh" checkreturn="tr...
Phing All The Things - Omni Adams
<target name="deploy">
<phingcall target="require-release" />
<phingcall target="require...
Phing All The Things - Omni Adams
Sanity
Chec
k
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
phing-the-things$ phing go-live -Dversion=1.2.3
Phing All The Things - Omni Adams
phing-the-things$ phing go-live -Dversion=1.2.3
Phing All The Things - Omni Adams
!$monitored ==
!$exist
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
<?php
require_once 'phing/Task.php';
class UpdateNewRelicTask extends Task {
public func...
Phing All The Things - Omni Adams
<taskdef name="newrelic"
classname="UpdateNewRelicTask" />
<target name="update-new-reli...
Phing All The Things - Omni Adams
<taskdef name="newrelic"
classname="UpdateNewRelicTask" />
<target name="update-new-reli...
Phing All The Things - Omni Adams
class UpdateNewRelicTask extends Task {
protected $version;
public function setVersion($...
Phing All The Things - Omni Adams
<target name="update-new-relic">
<newrelic version="${version}" />
</target>
Phing All The Things - Omni Adams
public function main() {
$options = array(
CURLOPT_POSTFIELDS => array(
'deployment[appl...
Phing All The Things - Omni Adams
public function main() {
...
$ch = curl_init();
curl_setopt_array($ch, $options);
curl_e...
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
Phing All The Things - Omni Adams
• Omni Adams
• @omnicolor
• http://omni-spot.blogspot.com
• omni@digitaldarkness.com
• h...
Upcoming SlideShare
Loading in …5
×

Phing all the things

1,009 views

Published on

Phing is a build system that lets you do all sorts of neat things quickly and easily. If you find yourself manually running complicated processes or frequently having to look up command line parameters for your tools, Phing can help make you more efficient. If your deployments have many error-prone steps or you find yourself dealing with fragile procedures, Phing can help keep your sanity.

Published in: Technology, Art & Photos
  • Be the first to comment

Phing all the things

  1. 1. Phing All The Things - Omni Adams
  2. 2. Phing All The Things - Omni Adams lazy development
  3. 3. Phing All The Things - Omni Adams
  4. 4. Phing All The Things - Omni Adams Stay DRY
  5. 5. Phing All The Things - Omni Adams
  6. 6. 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>
  7. 7. 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>
  8. 8. 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>
  9. 9. 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>
  10. 10. 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>
  11. 11. Phing All The Things - Omni Adams phing-the-things$ phing test Buildfile: /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 FINISHED Total time: 0.3155 seconds
  12. 12. Phing All The Things - Omni Adams F............................. Time: 0 seconds, Memory: 7.25Mb There was 1 failure: 1) GitTest::testGetCommitInfo LOL 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 1 Total time: 0.5653 seconds
  13. 13. 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>
  14. 14. 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>
  15. 15. Phing All The Things - Omni Adams F............................. Time: 0 seconds, Memory: 7.25Mb There was 1 failure: 1) GitTest::testGetCommitInfo LOL cats have clogged the tubes! /Users/Omni/phing-example/tests/GitTest.php:51 FAILURES! Tests: 30, Assertions: 51, Failures: 1. BUILD FINISHED Total time: 0.5619 seconds
  16. 16. Phing All The Things - Omni Adams
  17. 17. Phing All The Things - Omni Adams ● strict ● colors ● groups ● command line flags
  18. 18. Phing All The Things - Omni Adams <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true"> <arg value="--exclude-group=integration" /> </exec> </target>
  19. 19. Phing All The Things - Omni Adams <target name="test"> <exec executable="phpunit" passthru="true" checkreturn="true"> <arg value="${phpunitFlag}" /> </exec> </target>
  20. 20. Phing All The Things - Omni Adams
  21. 21. Phing All The Things - Omni Adams <property name="test" value="--group=smoke" /> <property name="outputDir" value="./docs" />
  22. 22. Phing All The Things - Omni Adams phing-the-things$ phing test -DphpunitFlag=--group=smoke Buildfile: /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 FINISHED Total time: 0.1058 seconds
  23. 23. 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>
  24. 24. Phing All The Things - Omni Adams things
  25. 25. 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" />
  26. 26. Phing All The Things - Omni Adams
  27. 27. 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>
  28. 28. Phing All The Things - Omni Adams
  29. 29. 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>
  30. 30. 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>
  31. 31. 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>
  32. 32. 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>
  33. 33. 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>
  34. 34. Phing All The Things - Omni Adams <exec executable="ps" outputProperty="ps-output"> <arg line="x |grep selen |grep -v 'grep|phing'" /> </exec>
  35. 35. Phing All The Things - Omni Adams
  36. 36. Phing All The Things - Omni Adams
  37. 37. Phing All The Things - Omni Adams
  38. 38. 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>
  39. 39. 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>
  40. 40. 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>
  41. 41. Phing All The Things - Omni Adams
  42. 42. Phing All The Things - Omni Adams <uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>
  43. 43. Phing All The Things - Omni Adams <uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>
  44. 44. Phing All The Things - Omni Adams <uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>
  45. 45. Phing All The Things - Omni Adams <uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>
  46. 46. Phing All The Things - Omni Adams <uptodate property="css-compiled" targetfile="style.css"> <srcfiles dir="styles" includes="**/*less" /> </uptodate>
  47. 47. 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>
  48. 48. Phing All The Things - Omni Adams
  49. 49. 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>
  50. 50. 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>
  51. 51. Phing All The Things - Omni Adams
  52. 52. Phing All The Things - Omni Adams
  53. 53. Phing All The Things - Omni Adams ASSUMPTIONS
  54. 54. Phing All The Things - Omni Adams
  55. 55. Phing All The Things - Omni Adams
  56. 56. Phing All The Things - Omni Adams
  57. 57. 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>
  58. 58. Phing All The Things - Omni Adams phing-the-things$ phing tag Buildfile: /Users/Omni/Sites/phing/build.xml [property] Loading /Users/Omni/Sites/phing/build.properties phing-the-things > require-version: [if] Error in IfTask Execution 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.3 BUILD 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.3 Total time: 1.5921 second
  59. 59. Phing All The Things - Omni Adams phing-the-things$ phing tag-no-version Buildfile: /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}
  60. 60. 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>
  61. 61. 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>
  62. 62. 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>
  63. 63. 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>
  64. 64. 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>
  65. 65. Phing All The Things - Omni Adams phing-the-things$ phing tag-version -Drelease=minor Buildfile: /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 FINISHED Total time: 0.3507 seconds phing-the-things $ git tag 0.0.1 0.1.0
  66. 66. 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>
  67. 67. 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>
  68. 68. 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>
  69. 69. 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>
  70. 70. 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>
  71. 71. Phing All The Things - Omni Adams
  72. 72. 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>
  73. 73. 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>
  74. 74. 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>
  75. 75. 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>
  76. 76. 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>
  77. 77. 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>
  78. 78. Phing All The Things - Omni Adams Sanity Chec k
  79. 79. Phing All The Things - Omni Adams
  80. 80. Phing All The Things - Omni Adams phing-the-things$ phing go-live -Dversion=1.2.3
  81. 81. Phing All The Things - Omni Adams phing-the-things$ phing go-live -Dversion=1.2.3
  82. 82. Phing All The Things - Omni Adams !$monitored == !$exist
  83. 83. Phing All The Things - Omni Adams
  84. 84. 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 } }
  85. 85. Phing All The Things - Omni Adams <taskdef name="newrelic" classname="UpdateNewRelicTask" /> <target name="update-new-relic"> <newrelic /> </target>
  86. 86. Phing All The Things - Omni Adams <taskdef name="newrelic" classname="UpdateNewRelicTask" /> <target name="update-new-relic"> <newrelic /> </target>
  87. 87. Phing All The Things - Omni Adams class UpdateNewRelicTask extends Task { protected $version; public function setVersion($version) { $this->version = $version; } }
  88. 88. Phing All The Things - Omni Adams <target name="update-new-relic"> <newrelic version="${version}" /> </target>
  89. 89. 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, ); ... }
  90. 90. Phing All The Things - Omni Adams public function main() { ... $ch = curl_init(); curl_setopt_array($ch, $options); curl_exec($ch); curl_close($ch); }
  91. 91. Phing All The Things - Omni Adams
  92. 92. Phing All The Things - Omni Adams
  93. 93. Phing All The Things - Omni Adams • Omni Adams • @omnicolor • http://omni-spot.blogspot.com • omni@digitaldarkness.com • https://joind.in/11182

×