Skip to main content
One Click Deployment with Jenkins


Florian Anderiasch / Thorsten Rinne
PHP Unconference 201 Hamburg
                      1,




                                      © 201 Mayflower GmbH
                                           1
DevOp
„I rant a lot“

@anderiasch      Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 2
Team Lead / Scrum Master
Head of Open Source Labs

@ThorstenRinne             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 3
Who are you?




       Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 4
Developers?




       Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 5
Administrators?




         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 6
DevOps?




     Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 7
Continuous Integration?




             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 8
How much time do you
 need for a release?


           Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 9
More than a year?




          Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 10
6 - 12 months?




         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 11
1 - 6 months?




        Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 12
2 - 4 weeks?




        Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 13
1 - 14 days?




        Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 14
1 - 24 hours?




        Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 15
Less than 15 minutes?




            Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 16
15 Minutes!




       Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 17
Why One Click
Deployment?


        Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 18
Everything is getting faster.




                Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 19
Faster feedback from
your customer / user




            Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 20
Faster ROI
(return on invest)



           Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 21
Faster response
if the market changes
                 Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 22
Developers are lazy.
            Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 23
Basic requirements




           Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 24
Agile software
 development


         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 25
Scrum or Kanban




         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 26
Test Driven Development




             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 27
Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 28
Continuous Integration




             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 29
Continuous Inspection




            Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 30
Refactoring




       Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 31
Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 32
Scrum
Kanban




         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 32
Scrum   Continuous
Kanban   Integration




                 Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 32
Scrum   Continuous Continuous
Kanban   Integration Inspection




                Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 32
Scrum   Continuous Continuous
Kanban   Integration Inspection




Continuous Deployment
                Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 32
Things you don‘t want.




             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 33
Having your SVN repo in
your webserver‘s docroot.


              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 34
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 35
Who‘s still doing this? :-)




                Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 36
Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 37
What do we need?




         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 38
First: a central build server




                 Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 39
Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 40
Continous Testing with
      PHPUnit


             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 41
Advantages




      Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 42
Test results at one central
           page


               Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 43
Software metrics at one
     central page


             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 44
Errors can be identified
  fast and then fixed
             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 45
Awareness




      Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 46
Awareness!
      Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 47
Continuous Integration in
      PHP projects


              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 48
PHPUnit
DocBlox


     Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 49
Continuous Inspection in
      PHP projects


              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 50
PHPCS
PHP Depend
  PHPMD
  phpcpd
   jslint
      Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 51
jslint?
 yes!


      Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 52
Infrastructure




         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 53
Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 54
Developer VM
Ubuntu 11.04


       Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 55
Testing VM + Jenkins VM:
      Ubuntu 11.04


              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 56
Staging VMs:
  Frontend: Ubuntu 11.04
Backend: Ubuntu 10.04 LTS


              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 57
amazon AWS live:
  Frontend: Ubuntu 11.04
Backend: Ubuntu 10.04 LTS

              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 58
Front Nodes
      Varnish
       nginx
 PHP 5.3 with APC
Zend Framework 1.1  1
   dojo toolkit 1.6
    Doctrine 2.1
            Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 59
Backend Nodes
MySQL Master/Slave
   Apache Solr
 PHP 5.3 with APC
    RabbitMQ
     ejabberd
          Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 60
Development workflow




           Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 61
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 62
2. Post commit hook


Build triggered on Jenkins



                Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 63
Jenkins build checks



            Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 64
1. PHPUnit Build:
         Unittests
Controller Tests (Zend_Test)
  PHP Code Coverage

                Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 65
2. Debian Package Build



             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 66
3. Deploy to staging
4. Deploy staging to live


              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 67
What is a build process?



              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 68
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 69
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 70
parallelTasks:
php_depend
   phpmd
  phpunit
   phpcpd
   phpcs
   jslint
         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 71
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 72
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 73
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 74
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 &lt;%ae&gt; %aD%n%n' />
   </exec>




                        Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 75
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 76
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
&lt;mapolis@mayflower.de&gt;" />
   </exec>


                        Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 77
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 78
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 79
Deploy Staging to live
scp to all hosts




             Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 80
Disadvantages and
    problems


          Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 81
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 82
Complexity beginning such
    a infrastructure


              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 83
Jenkins:
Single point of failure!


              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 84
Cool stuff
which is now possible


            Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 85
Deploy by customer. :-)
              Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 86
Jenkins Chuck Norris Plugin



                Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 87
git bisect start
   $BAD $GOOD


         Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 88
Minimum time from
bugreport to deploy:
    30 minutes


            Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 89
$ 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 90
Questions?




       Continuous Improvement in PHP Projects I   Mayflower GmbH I 25th February I 91
Thank you very much for your attention!




Contact   Florian Anderiasch              Thorsten Rinne
          florian.anderiasch@mayflower.de   thorsten.rinne@mayflower.de
          +49 89 242054-1   134           +49 89 242054-31

          Mayflower GmbH                   Mayflower GmbH
          Mannhardtstr. 6                 Mannhardtstr. 6
          80538 München                   80538 München
          Germany                         Germany



                                                                       © 201 Mayflower GmbH
                                                                            1