Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Continuous Integration with Jenkins

Continuous Integration with Jenkins

A workshop on using Jenkins for Continuous Integration given at the CodeConnexx 2013 conference

Ba4801d2cbcf2e649f3aedbfcbfb3c36?s=128

Mike van Riel

November 07, 2013
Tweet

Transcript

  1. CodeConnexx 7 November 2013 Continuous Integration with Jenkins

  2. https://joind.in/9937 2 CodeConnexx 7 November 2013 Goals for today •

    Introduce Continuous Integration for PHP • Install Jenkins • Configure Jenkins for PHP • Configure a project in Jenkins
  3. https://joind.in/9937 3 CodeConnexx 7 November 2013 About me • I

    am Mike van Riel  @mvriel
  4. https://joind.in/9937 4 CodeConnexx 7 November 2013 About me • I

    am Mike van Riel • Lead Developer for phpDocumentor
  5. https://joind.in/9937 5 CodeConnexx 7 November 2013 About me • I

    am Mike van Riel • Lead Developer for phpDocumentor • Software Composer at Ingewikkeld
  6. https://joind.in/9937 6 CodeConnexx 7 November 2013 About me • I

    am Mike van Riel • Lead Developer for phpDocumentor • Software Composer at Ingewikkeld • Foster father of two cute dogs
  7. https://joind.in/9937 7 CodeConnexx 7 November 2013 Requirements • Virtual Machine

    or VPS • Project with, at least, unit tests • PHP installed with PEAR • Java
  8. https://joind.in/9937 8 CodeConnexx 7 November 2013 About Quality Assurance

  9. https://joind.in/9937 9 CodeConnexx 7 November 2013 “Quality Assurance is more

    than unit tests”
  10. https://joind.in/9937 10 CodeConnexx 7 November 2013 Quality Assurance • Automated

    tests • Coding style • Monitoring • Metrics and trends
  11. https://joind.in/9937 11 CodeConnexx 7 November 2013 What is Continuous Integration?

  12. https://joind.in/9937 12 CodeConnexx 7 November 2013 Continuous Integration • A

    watchdog guarding your Quality. • Immediate insight into the state of your code-base. • Detailed overview of possible issues. • A way of thinking and working.
  13. https://joind.in/9937 13 CodeConnexx 7 November 2013 Why Continuous Integration?

  14. https://joind.in/9937 14 CodeConnexx 7 November 2013 Why? • Automated, less

    error-prone • Continuous, always available • Transparent for everyone • Reduces defects
  15. https://joind.in/9937 15 CodeConnexx 7 November 2013 How does it work?

  16. https://joind.in/9937 16 CodeConnexx 7 November 2013 Commit / push CI

    polls VCS Rinse and repeat Run steps Report failure Success
  17. https://joind.in/9937 17 CodeConnexx 7 November 2013 Which environment?

  18. https://joind.in/9937 18 CodeConnexx 7 November 2013 Environments • CruiseControl /

    phpUnderControl • Jenkins • Thoughtworks Go • Sismo • Travis-CI • PHPCI • Scrutinizer CI
  19. https://joind.in/9937 19 CodeConnexx 7 November 2013 Jenkins

  20. https://joind.in/9937 20 CodeConnexx 7 November 2013 Jenkins • Java application

    • Extensible with a lot of plugins • Integrates nicely with PHP QA Tools
  21. https://joind.in/9937 21 CodeConnexx 7 November 2013 What can we do

    with it?
  22. https://joind.in/9937 22 CodeConnexx 7 November 2013 What for? Mess detection

    Automated testing Copy/paste detection Various metrics Coding Standards API Documentation
  23. https://joind.in/9937 23 CodeConnexx 7 November 2013 Automated testing • Unit

    tests • Integration or system tests • Acceptance tests
  24. https://joind.in/9937 24 CodeConnexx 7 November 2013 Mess detection • Finds

    possible bugs • Checks for sub-optimal code • Warns you for complex code • Detects unused code
  25. https://joind.in/9937 25 CodeConnexx 7 November 2013 Copy/paste detection • Prevents

    copy / paste coding • Detects refactoring hotspots • Reduces maintenance costs
  26. https://joind.in/9937 26 CodeConnexx 7 November 2013 PHP Code Sniffer •

    Checks for coding style violations • Helps to improves readability – Consistency – Best practices • Comes with PEAR, PSR-1 & PSR-2
  27. https://joind.in/9937 27 CodeConnexx 7 November 2013 PHPloc & PHP_Depend •

    Collects many metrics – Cyclomatic Complexity – N-path Complexity – Lines per method – Spread of classes – And a lot more
  28. https://joind.in/9937 28 CodeConnexx 7 November 2013 Book recommendation

  29. https://joind.in/9937 29 CodeConnexx 7 November 2013 PHPDocumentor • API Reference

    Documentation • Class Diagram • Documentation validation Especially useful for open source projects
  30. https://joind.in/9937 30 CodeConnexx 7 November 2013 Installing Jenkins

  31. https://joind.in/9937 31 CodeConnexx 7 November 2013 Installing Jenkins Manual Installation

    1. Install Java 2. Download war file 3. Put on server 4. Add to boot scripts Using a package manager 1. Add Jenkins repository 2. Update package manager 3. Run installation
  32. https://joind.in/9937 32 CodeConnexx 7 November 2013 Installing requirements $ apt-get

    update $ apt-get install curl vim make ant daemon bash-completion openjdk-6-jre php5-cli php-pear git 
  33. https://joind.in/9937 33 CodeConnexx 7 November 2013 Installing tools $ pear

    config-set auto_discover 1 $ pear install pear.phing.info/phing $ pear install pear.phpmd.org/PHP_PMD $ pear install pear.phpunit.de/PHPUnit $ pear install pear.phpunit.de/phpcpd $ pear install pear.phpunit.de/phploc $ pear install pear.php.net/PHP_CodeSniffer $ pear install pear.phpdoc.org/phpDocumentor 
  34. https://joind.in/9937 34 CodeConnexx 7 November 2013 “The next few slides

    demonstrate how you would usually install Jenkins; but not today”
  35. https://joind.in/9937 35 CodeConnexx 7 November 2013 Installing Jenkins $ wget

    -q -O - http://pkg.jenkins-ci.org/debian/jenkin s-ci.org.key | sudo apt-key add - deb http://pkg.jenkins-ci.org/debian binary/ Add to /etc/apt/sources.list 
  36. https://joind.in/9937 36 CodeConnexx 7 November 2013 Installing Jenkins $ apt-get

    update $ apt-get install jenkins  Why not? Jenkins 1.536 and 1.538 (latest) are broken
  37. https://joind.in/9937 37 CodeConnexx 7 November 2013 “So .. How are

    we going to install Jenkins today?”
  38. https://joind.in/9937 38 CodeConnexx 7 November 2013 Installing Jenkins $ dpkg

    -i ~/jenkins/jenkins_1.535_all.deb 
  39. https://joind.in/9937 39 CodeConnexx 7 November 2013 Configuring Jenkins

  40. https://joind.in/9937 40 CodeConnexx 7 November 2013 Prime resource Jenkins-PHP.org

  41. https://joind.in/9937 41 CodeConnexx 7 November 2013 Jenkins-PHP.org • Maintained by

    Sebastian Bergmann • Job template for PHP projects • Provides assistance with instructions • But: replace phpdox with phpDocumentor
  42. https://joind.in/9937 42 CodeConnexx 7 November 2013 Installing dependencies $ wget

    http://localhost:8080/jnlpJars/jenkins-cli.jar $ java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin checkstyle cloverphp dry htmlpublisher jdepend plot pmd violations xunit git $ jenkins-cli.jar -s http://localhost:8080 safe-restart 
  43. https://joind.in/9937 43 CodeConnexx 7 November 2013 Installing dependencies $ wget

    https://raw.github.com/sebastianbergmann/php- jenkins-template/master/config.xml $ java -jar jenkins-cli.jar -s http://localhost:8080 create-job php-template < config.xml 
  44. https://joind.in/9937 44 CodeConnexx 7 November 2013 Configuring Jenkins • Configure

    security • Configure mail settings • Install additional plugins • Github • IRC
  45. https://joind.in/9937 45 CodeConnexx 7 November 2013 Adding a project to

    Jenkins
  46. https://joind.in/9937 46 CodeConnexx 7 November 2013 Setting up a new

    project 1. Create a build file 2. Tell Jenkins to add a new Job 3. Use a copy of the existing php-template job 4. Add VCS information and schedule 5. Enable your Job
  47. https://joind.in/9937 47 CodeConnexx 7 November 2013 Build files Phing or

    Ant?
  48. https://joind.in/9937 48 CodeConnexx 7 November 2013 Are you ready to

    rumble?