continuous integration at mollie

56
Continuous Integration for PHP www.mollie.nl

Upload: willemstuursma

Post on 15-Dec-2014

2.099 views

Category:

Technology


3 download

DESCRIPTION

In this talk, I will discuss our experiences at Mollie with setting up the Jenkins Continuous Integration server for all our PHP projects. The talk will be aimed at developers with little or no experience with CI.

TRANSCRIPT

Page 1: Continuous Integration at Mollie

Continuous Integration for PHP

www.mollie.nl

Page 2: Continuous Integration at Mollie

Contents

• About Mollie

• What is CI

• What’s in it for you?

• How to set it up

• Tips

• Q&A

Page 3: Continuous Integration at Mollie

• Payment Service Provider

• iDEAL, Pay-per-call, Premium SMS, etc.

• SMS gateway

• HTTP API, SMPP, Email to SMS, etc.

• Located in Amsterdam, near Vondelpark

• Four developers

Page 4: Continuous Integration at Mollie

Codebase 1/2

• Main project: 250K LOC

• New code is pretty good, but...

• lots of code created around 2004 (when magic_quotes was cool)

Page 5: Continuous Integration at Mollie

Codebase 2/2

• Git as SCM

• Also:

• Plugins for OpenCart, Magento, WHCMS

• Example API classes

• Internal projects

Page 6: Continuous Integration at Mollie

Technology

• Nothing too complicated:

• Nginx

• PHP

• MySQL

• Redis

Page 7: Continuous Integration at Mollie

Continuous Integration

Page 8: Continuous Integration at Mollie

TheoryIn software engineering, continuous integration (CI)

implements continuous processes of applying quality control — small pieces of effort, applied frequently. Continuous

integration aims to improve the quality of software, and to reduce the time taken to deliver it, by replacing the traditional practice of applying quality control after

completing all development. (source: Wikipedia)

Page 9: Continuous Integration at Mollie

In practiceRun all tests and create some reports after every

commit.

Page 10: Continuous Integration at Mollie

Why is it useful? 1/2

• All tests are run after every commit.

• You always know if you can deploy after a commit.

• You know who broke a test.

Page 11: Continuous Integration at Mollie

Why is it useful? 2/2

• You can get pretty graphs

• Provides trends

• Motivational for developers

• First step to deploying from SCM

• No more “works for me”.

Page 12: Continuous Integration at Mollie

Meet Jenkins

Page 13: Continuous Integration at Mollie
Page 14: Continuous Integration at Mollie
Page 15: Continuous Integration at Mollie

What’s in it for you?

Page 16: Continuous Integration at Mollie
Page 17: Continuous Integration at Mollie
Page 18: Continuous Integration at Mollie
Page 19: Continuous Integration at Mollie

PHPUnit

Page 20: Continuous Integration at Mollie
Page 21: Continuous Integration at Mollie
Page 22: Continuous Integration at Mollie
Page 23: Continuous Integration at Mollie

Code coverage 1/4

Page 24: Continuous Integration at Mollie

Code Coverage 2/4

Page 25: Continuous Integration at Mollie

Code Coverage 3/4Requires xdebug, but it’s pretty cool.

Page 26: Continuous Integration at Mollie

Code coverage 4/4

• Takes some time to generate

• By default: only files included in test are part of the coverage.

• Coverage < Assertions

Page 27: Continuous Integration at Mollie

phploc

Plots

Page 28: Continuous Integration at Mollie
Page 29: Continuous Integration at Mollie
Page 30: Continuous Integration at Mollie

Checkstyle

Page 31: Continuous Integration at Mollie

Copy paste detector

Page 32: Continuous Integration at Mollie

PHP Depend

Page 33: Continuous Integration at Mollie

PHP depend, php mess detector etc

• Do fancy analysis on your code

• Create pretty diagrams

• Take a lot of time

• Little value (YMMV)

Page 34: Continuous Integration at Mollie

How to set it up

Page 35: Continuous Integration at Mollie

Vagrant

• Create and configure lightweight, reproducible, and portable development environments.

• Works with VirtualBox and Chef

Page 36: Continuous Integration at Mollie

Vagrant

• Allows you create VMs and deploy them with software from a Chef recipe.

• Many open source Chef recipes available.

• https://github.com/fnichol/chef-jenkins

Page 37: Continuous Integration at Mollie

Vagrantfile config.vm.customize do |vm| vm.memory_size = 1536 end config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.json = { :jenkins => { :server => { :plugins => %w(checkstyle clover dry htmlpublisher jdepend plot pmd violations xunit git github) } } } chef.add_recipe("vagrant_main") end

Page 38: Continuous Integration at Mollie

Chef recipe%w{pdepend/PHP_Depend-beta phpmd/PHP_PMD-alpha phpunit/phpcpd phpunit/phploc phpunit/test_helpers PHPDocumentor PHP_CodeSniffer digitalsandwich/Phake phpunit/PHP_CodeBrowser phpunit/PHPUnit}.each do |pear_package| php_pear pear_package do options "--alldeps" action :install endend

Page 39: Continuous Integration at Mollie

Install PHP specific stuff

• Jenkins PHP manual and templates provided by Sebastian Bergmann.

• http://jenkins-php.org/

Page 40: Continuous Integration at Mollie

Tell Jenkins what to do

• Create build.xml

• Lives in your code

• Create a Job in Jenkins

• Point to your SCM

Page 41: Continuous Integration at Mollie
Page 42: Continuous Integration at Mollie

Configure Jenkins

• After running build.xml, lots of XML files are generated.

• You can install plugins in Jenkins which understand these XML files

• Configure Jenkins plugins to read these files and “publish” them.

• Optionally: do some stuff after build succeeds.

Page 43: Continuous Integration at Mollie
Page 44: Continuous Integration at Mollie

Some CI tips

Page 45: Continuous Integration at Mollie

Get fast hardware

Page 46: Continuous Integration at Mollie
Page 47: Continuous Integration at Mollie

Don’t run more than you need

• Consider if you want to wait every build on phpmd, pdepend etc.

• Alternatively: clone your job and run tests only in one job and analysis in other job.

Page 48: Continuous Integration at Mollie

Use SCM tags

• Jenkins can push tags to your SCM if a build succeeds

• Combined with tags on deploy very convenient

Page 49: Continuous Integration at Mollie

Make sure production & Jenkins are identical

• Different platforms? --> Bugs.

• Different PHP versions? --> Bugs.

• Different MySQL versions? --> Bugs.

Page 50: Continuous Integration at Mollie

Integrate with your dashboards

Page 51: Continuous Integration at Mollie
Page 52: Continuous Integration at Mollie
Page 53: Continuous Integration at Mollie
Page 54: Continuous Integration at Mollie

Integrate with chat

Page 56: Continuous Integration at Mollie

We’re hiring