© Mayflower GmbH 2010
One-Click Deployment with Jenkins
Florian Anderiasch I October 28, 2011
Mayflower GmbH I 2
Who am I?
Mayflower GmbH I 3
DeveloperEx-AdminDevOp?
„I rant a lot“
@anderiaschstay in touch!
Mayflower GmbH I 4
Who are you?
Mayflower GmbH I 5
Developers?
Mayflower GmbH I 6
Admins?
Mayflower GmbH I 7
Continuous Integration?
Mayflower GmbH I 8
How often
do yourelease?
Mayflower GmbH I 9
6-12 months?
Mayflower GmbH I 10
1-6 months?
Mayflower GmbH I 11
2-4 weeks?
Mayflower GmbH I 12
1-14 days?
Mayflower GmbH I 13
1-24 hours?
Mayflower GmbH I 14
Less than 15 minutes?
Mayflower GmbH I 15
15 minutes!
Mayflower GmbH I 16
Why One-ClickDeployment?
Mayflower GmbH I 17
Everything is moving faster.
Mayflower GmbH I 18
React faster touser feedback
React faster touser feedback
Mayflower GmbH I 19
Faster ROITime to market
20Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Developers are lazy.Developers are lazy.
Mayflower GmbH I 21
Basic requirements
Mayflower GmbH I 22
Agile softwaredevelopment
Mayflower GmbH I 23
Scrum or Kanban
Mayflower GmbH I 24
Test Driven Development
Mayflower GmbH I 25
Continuous Integration
Mayflower GmbH I 26
Integrating the freshparts of code into
the application
at least daily
Mayflower GmbH I 27
Continuous Inspection
Mayflower GmbH I 28
instantfeedback
Mayflower GmbH I 29
Refactoring
Mayflower GmbH I 30
ContinuousDeployment
Mayflower GmbH I 31
Reproducableresults
Mayflower GmbH I 32
There arepractices you wantto avoid
Mayflower GmbH I 33
Having your SVN repo in your
webserver's docroot.
Mayflower GmbH I 34
Using SSH and vi and your root account on
the live server.
Mayflower GmbH I 35
Who's still doing this? :-)
Mayflower GmbH I 36
Mayflower GmbH I 37
What do we need?
Mayflower GmbH I 38
First of all:centralizedbuild server
Mayflower GmbH I 39
There are plenty:
CruiseControl/phpUCBamboobuildbot
Mayflower GmbH I 40
tests are running
all the time
Mayflower GmbH I 41
Mayflower GmbH I 42
Repeatedlyrunning
tests
Mayflower GmbH I 43
Advantages
Mayflower GmbH I 44
Informationavailable
at onesingle point
Mayflower GmbH I 45
find errors
Mayflower GmbH I 46
andfix themquickly
Mayflower GmbH I 47
Metrics
Mayflower GmbH I 48
Dashboards
Mayflower GmbH I 49
Awareness
Mayflower GmbH I 50
Awareness!
Mayflower GmbH I 51
Continuous integrationin
PHP projects
Mayflower GmbH I 52
Continuous Integrationin
PHP projects
Mayflower GmbH I 53
PHPUnitDocBlox
Mayflower GmbH I 54
Continuous Inspectionin
PHP projects
Mayflower GmbH I 55
PHP_CodeSnifferPHP_Depend
PHPMDphpcpd
jslint
Mayflower GmbH I 56
Infrastructure
Mayflower GmbH I 57
Mayflower GmbH I 58
59Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
One Ubuntu package to rule them all.
Mayflower GmbH I 60
Developer VMUbuntu 11.04
Mayflower GmbH I 61
Jenkins: Dev-VMTesting: Dev-VM
Ubuntu 11.04
Mayflower GmbH I 62
Staging VMs:Frontend: Ubuntu 11.04
Backend: Ubuntu 10.04 LTS
(bad idea, use one version)
Mayflower GmbH I 63
Amazon AWS live:Frontend: Ubuntu 11.04
Backend: Ubuntu 10.04 LTS
Mayflower GmbH I 64
Frontend NodesVarnishnginx
PHP 5.3 with APCZend Framework 1.11
Dojo 1.6Doctrine2.1
Mayflower GmbH I 65
Backend NodesMySQL Master/Slave
Apache SolrGearman/RabbitMQ
memcachedejabberd
Mayflower GmbH I 66
Development workflow
Mayflower GmbH I 67
1. developer commits code2. post commit hook: build3. checks4. packaging a .deb5. (deploy to STAGING)6. (deploy to LIVE)
Mayflower GmbH I 68
<project> <property /> <target name=“build“></target> <target name=“clean“></target> <target name=“phpunit“></target> <target name=“deploy-to-staging“></target></project>
Mayflower GmbH I 69
<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>
Mayflower GmbH I 70
„ant build“
ant syncant cleanant db-up
ant parallelTasksant parallelTasksant phpunitant phpcb
ant build-debant build-deb
Mayflower GmbH I 71
„ant parallelTasks“
ant phpmdant phpdocant phpcpdant phpcsant jslint
Mayflower GmbH I 72
„build-deb“
git pullant phpunitant clean
ant compilejsant compilecss
Mayflower GmbH I 73
„deploy-to-staging“
ant deb-signant db-staging-up
scp to all hosts
Mayflower GmbH I 74
„deploy-to-live“
fetch known-good .debscp to all hosts
there is no step 3
Mayflower GmbH I 75
Disadvantagesand
problems
Mayflower GmbH I 76
Build time15 min on harddisk
massive disk i/o4 min on ramdisk
Mayflower GmbH I 77
Complex setup
Mayflower GmbH I 78
Jenkins:Single point of failure!
Mayflower GmbH I 79
Goodies
Mayflower GmbH I 80
everyonecan deploy
(including theproduct owner)
Mayflower GmbH I 81
git bisect start$BAD $GOOD
Mayflower GmbH I 82
30min frombugreport to
deploy
Mayflower GmbH I 83
We can still do hotfixes in thisenvironment
Mayflower GmbH I 84
plotting plugin (gitstats)
Mayflower GmbH I 85
Mayflower GmbH I 86
echo $(olddir=`pwd`;cd /media/ram/PROJECT;
git log --oneline --after=$(date +%Y-%m-%d -d yesterday) --shortstat
| grep --color=none "^ " | sed 's,^ *,,' | awk 'NF==7 {p+=$4;m+=$6;diff+=$4;diff-=$6;} END {printf("%d %d %d\n", p, m, diff)}';cd
$olddir;) > gitnum.properties.all
echo YVALUE=$(cat gitnum.properties.all | cut -d' ' -f1) >> gitnum.properties.plus
Mayflower GmbH I 87
Jenkins Plugin: Chuck Norris
Mayflower GmbH I 88
Questions?
29.10.11 Mayflower GmbH 89
Thanks for listening!
Contact Florian Anderiasch
+49 89 242054 1134
@anderiasch
Mayflower GmbH
Mannhardtstrasse 6
80538 München
Mayflower GmbH I 90
ImagesVader (42), Sebastian Bergmann, CC-BY-SA
http://www.flickr.com/photos/sebastian_bergmann/2282734669
Clouds (52), John Mueller, CC-BY-NC-NDhttp://www.flickr.com/photos/johnmueller/52621490/
Mayflower GmbH I 91
CinderConnecting CI server and IDE
Help is welcomehttp://github.com/winks/cinder
needs XML from phpuc/hudson/bamboo
and nothing else :)