One Click Deployment with Jenkins - PHP Unconference 2011
-
Upload
mayflower-gmbh -
Category
Technology
-
view
5.616 -
download
3
description
Transcript of One Click Deployment with Jenkins - PHP Unconference 2011
© 2011 Mayflower GmbH
Florian Anderiasch / Thorsten Rinne PHP Unconference 2011, Hamburg
One Click Deployment with Jenkins
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 2
DevOp„I rant a lot“
@anderiasch
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Team Lead / Scrum MasterHead of Open Source Labs
@ThorstenRinne3
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Who are you?
4
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Developers?
5
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Administrators?
6
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
DevOps?
7
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Continuous Integration?
8
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
How much time do you need for a release?
9
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
More than a year?
10
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
6 - 12 months?
11
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
1 - 6 months?
12
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
2 - 4 weeks?
13
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
1 - 14 days?
14
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
1 - 24 hours?
15
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Less than 15 minutes?
16
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
15 Minutes!
17
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Why One Click Deployment?
18
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Everything is getting faster.
19
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Faster feedback from your customer / user
20
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Faster ROI (return on invest)
21
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Faster responseif the market changes
22
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 23Developers are lazy.
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Basic requirements
24
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Agile software development
25
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Scrum or Kanban
26
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Test Driven Development
27
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 28
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Continuous Integration
29
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Continuous Inspection
30
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Refactoring
31
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 32
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 32
ScrumKanban
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 32
ScrumKanban
ContinuousIntegration
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 32
ScrumKanban
ContinuousIntegration
ContinuousInspection
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Continuous Deployment
32
ScrumKanban
ContinuousIntegration
ContinuousInspection
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Things you don‘t want.
33
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Having your SVN repo in your webserver‘s docroot.
34
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Using SSH and vi and your root account on the live
server. Never.
35
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Who‘s still doing this? :-)
36
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 37
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
What do we need?
38
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
First: a central build server
39
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 40
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Continous Testing with PHPUnit
41
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Advantages
42
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Test results at one central page
43
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Software metrics at one central page
44
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Errors can be identified fast and then fixed
45
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Awareness
46
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 47
Awareness!
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Continuous Integration in PHP projects
48
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
PHPUnitDocBlox
49
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Continuous Inspection in PHP projects
50
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
PHPCSPHP Depend
PHPMDphpcpd
jslint
51
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
jslint?yes!
52
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Infrastructure
53
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 54
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Developer VMUbuntu 11.04
55
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Testing VM + Jenkins VM:Ubuntu 11.04
56
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Staging VMs:Frontend: Ubuntu 11.04
Backend: Ubuntu 10.04 LTS
57
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
amazon AWS live:Frontend: Ubuntu 11.04
Backend: Ubuntu 10.04 LTS
58
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Front NodesVarnishnginx
PHP 5.3 with APCZend Framework 1.11
dojo toolkit 1.6Doctrine 2.1
59
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 60
Backend NodesMySQL Master/Slave
Apache SolrPHP 5.3 with APC
RabbitMQejabberd
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Development workflow
61
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
1. git workflow
62
$ 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
2. Post commit hook
63
Build triggered on Jenkins
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Jenkins build checks
64
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
1. PHPUnit Build:Unittests
Controller Tests (Zend_Test)PHP Code Coverage
65
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
2. Debian Package Build
66
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
3. Deploy to staging4. Deploy staging to live
67
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
What is a build process?
68
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
ant syncant clean
ant db-updateparallelTasks:
ant phpunitant phpcbant deb
69
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
<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>
70
ant phpunit
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
parallelTasks:php_depend
phpmdphpunitphpcpdphpcsjslint
71
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 72
Build Debian Packageant autoloaderant phpunitant clean
ant compilejsant compilecss
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
<target name="deb" depends="autoloader,phpunit-coverage,clean,autoloader,compilejs,compilecss" description="Generate Debian package"> <exec executable="gpg"> <arg value="--armor" /> <arg value="--import" /> <arg value="scripts/build/deb/mapolis.mayflower.de.pgp" /> </exec> <buildnumber />
73
ant deb (I)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
<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" />
74
ant deb (II)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
<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>
75
ant deb (III)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
<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" />
76
ant deb (IV)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
<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 <[email protected]>" /> </exec>
77
ant deb (V)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
<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>
78
ant deb (VI)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Deploy Stagingant clean
ant deb-signant db-staging-upscp to all hosts
79
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 80
Deploy Staging to livescp to all hosts
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Disadvantages and problems
81
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Build time15 min on harddisk
massive disk i/o4 min on ramdisk :-)
82
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Complexity beginning such a infrastructure
83
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Jenkins:Single point of failure!
84
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Cool stuff which is now possible
85
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 86
Deploy by customer. :-)
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I 87
Jenkins Chuck Norris Plugin
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
git bisect start $BAD $GOOD
88
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Minimum time from bugreport to deploy:
30 minutes
89
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
$ 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
90
Continuous Improvement in PHP Projects I Mayflower GmbH I 25th February I
Questions?
91
Thank you very much for your attention!
© 2011 Mayflower GmbH
Contact Florian [email protected]+49 89 242054-1134
Mayflower GmbHMannhardtstr. 680538 MünchenGermany
Thorsten [email protected]+49 89 242054-31
Mayflower GmbHMannhardtstr. 680538 MünchenGermany