32. Scrum
Kanban
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 31
33. Scrum Continuous
Kanban Integration
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 31
34. Scrum Continuous Continuous
Kanban Integration Inspection
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 31
35. Scrum Continuous Continuous
Kanban Integration Inspection
Continuous Deployment
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 31
36. Things you don‘t want.
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 32
37. Having your SVN repo in
your webserver‘s docroot.
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 33
38. Using SSH and vi and your
root account on the live
server. Never.
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 34
39. Who‘s still doing this? :-)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 35
58. One Ubuntu package to
rule them all.
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 54
59. Development VMs
Jenkins CI Server
Selenium Server
Monitoring Server
Testing Server
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 55
60. http://www.flickr.com/photos/nirak/644337888/
Only on production:
Frontend Nodes 11.04
Backend Nodes 10.04 LTS
Building a Cloud-based social network I Mayflower GmbH I 1 October 201 I 56
1th 1
62. http://www.flickr.com/photos/nirak/644337888/
Mayflower DMZ
Developer Laptopamazon AWS
with Ubuntu VM
(Git repo + complete
Eucalyptus Cloud
software stack)
Building a Cloud-based social network I Mayflower GmbH I 1 October 201 I 58
1th 1
63. http://www.flickr.com/photos/nirak/644337888/
Mayflower DMZ
Gitorious Server amazon AWS
Jenkins CI Server
Puppet Master
Eucalyptus Cloud
Selenium Server
Building a Cloud-based social network I Mayflower GmbH I 1 October 201 I 59
1th 1
64. http://www.flickr.com/photos/nirak/644337888/
2 Frontnodes
3 Backendnodes
Mayflower DMZ
Development Monitor
Staging Monitor
amazon AWS
Eucalyptus Cloud
Building a Cloud-based social network I Mayflower GmbH I 1 October 201 I 60
1th 1
65. http://www.flickr.com/photos/nirak/644337888/
Mayflower DMZ
2 Frontnodes amazon AWS
2 Backendnodes
Drupal Cloud
Eucalyptus
Live Monitor
Building a Cloud-based social network I Mayflower GmbH I 1 October 201 I 61
1th 1
68. Frontnode 1 Frontnode 2
Varnish Varnish
nginx nginx
PHP 5.3 PHP 5.3
Backendnode 1 Backendnode 2
Backendnode 3
MySQL Master MySQL Slave
RabbitMQ
MogileFS MogileFS
Apache Solr
Memcached Memcached
PHP 5.3
PHP 5.3 PHP 5.3
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 64
69. Development workflow
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 65
70. 1. git workflow
$ git add Foo.php
$ git commit -m ″Bar″
$ ant jslint
$ ant phpunit
...
$ git push
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 66
71. 2. Post commit hook
Build triggered on Jenkins
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 67
72. Jenkins build checks
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 68
73. 1. PHPUnit Build:
Unittests
Controller Tests (Zend_Test)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 69
74. 2. Debian Package Build
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 70
75. 3. Deploy to staging
4. Deploy staging to live
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 71
76. At midnight:
DocBlox
Static code analysis
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 72
77. What is a build process?
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 73
78. ant sync
ant clean
ant db-update
parallelTasks:
ant phpunit
ant phpcb
ant deb
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 74
79. ant phpunit
<target
name="phpunit"
depends="db-test"
description="Run all tests">
<exec executable="phpunit"
failonerror="true">
<arg line="--configuration $
{basedir}/tests/phpunit-verbose.xml $
{basedir}/tests/AllTests.php" />
</exec>
</target>
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 75
80. parallelTasks:
php_depend
phpmd
phpunit
phpcpd
phpcs
jslint
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 76
81. Build Debian Package
ant autoloader
ant phpunit
ant clean
ant compilejs
ant compilecss
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 77
82. ant deb (I)
<target
name="deb"
depends="autoloader,phpunit-
coverage,clean,autoloader,compilejs,compi
lecss"
description="Generate Debian package">
<exec executable="gpg">
<arg value="--armor" />
<arg value="--import" />
<arg value="scripts/build/deb/
mapolis.mayflower.de.pgp" />
</exec>
<buildnumber />
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 78
83. ant deb (II)
<exec executable="git"
outputproperty="githash">
<arg value="describe" />
<arg value="--always" />
<arg value="--match" />
<arg value="" />
</exec>
<touch file="debian/changelog" />
<move file="debian/changelog"
tofile="debian/changelog.old" />
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 79
84. ant deb (III)
<exec executable="git"
output="debian/changelog.new">
<arg value="log" />
<arg value="-n" />
<arg value="1" />
<arg value='--format=format:mapolis-
web (${build.number}-${githash})
unstable; urgency=low%n%n * %s%n%n --
%an <%ae> %aD%n%n' />
</exec>
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 80
85. ant deb (IV)
<concat destfile="debian/changelog">
<fileset
file="debian/changelog.new" />
<fileset
file="debian/changelog.old" />
</concat>
<delete file="debian/changelog.new" />
<delete file="debian/changelog.old" />
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 81
86. ant deb (V)
<exec executable="dpkg-buildpackage">
<arg value="-b" />
<arg value="-v${build.number}-$
{githash}" />
<arg value="-Zlzma" />
<arg value="-z9" />
<arg value="-k78532445" />
<arg value="-pgpg" />
<arg value="-sgpg" />
<arg value="-mMayflower Mapolis Team
<mapolis@mayflower.de>" />
</exec>
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 82
87. ant deb (VI)
<move todir="build/deb/">
<fileset dir="${basedir}/../">
<include name="mapolis*.deb" />
<include name="mapolis*.changes" />
</fileset>
</move>
<exec executable="dpkg-buildpackage">
<arg value="-Tclean" />
</exec>
</target>
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 83
88. Deploy Staging
ant clean
ant deb-sign
ant db-staging-up
scp to all hosts
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 84
89. Deploy Staging to live
scp to all hosts
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 85
90. Disadvantages and
problems
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 86
91. Build time
15 min on harddisk
massive disk i/o
4 min on ramdisk :-)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 87
92. Complexity beginning such
a infrastructure
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 88
93. Jenkins:
Single point of failure!
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 89
94. Cool stuff
which is now possible
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 90
95. Deploy by customer. :-)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 91
96. Jenkins Chuck Norris Plugin
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 92
97. git bisect start
$BAD $GOOD
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 93
98. Minimum time from
bugreport to deploy:
30 minutes
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 94
99. $ git branch hotfix-2011-08-22
$ git checkout hotfix-2011-08-22
$ git reset --hard "last stable sha-1"
$ git cherry-pick "hotfix sha-1"
$ echo build.number=23 > build.number
$ ant deb
$ scp build/deb/*.deb xyz.amazonaws.com:/
opt/repository/
$ git checkout master
$ git push origin hotfix-2011-08-10
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 95