One Click Deployment with Jenkins - PHP Unconference 2011

Post on 01-Dec-2014

5.617 views 3 download

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 &lt;%ae&gt; %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 &lt;mapolis@mayflower.de&gt;" /> </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 Anderiaschflorian.anderiasch@mayflower.de+49 89 242054-1134

Mayflower GmbHMannhardtstr. 680538 MünchenGermany

Thorsten Rinnethorsten.rinne@mayflower.de+49 89 242054-31

Mayflower GmbHMannhardtstr. 680538 MünchenGermany