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

Continuous Integration with Jenkins

Mike van Riel
November 07, 2013

Continuous Integration with Jenkins

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

Mike van Riel

November 07, 2013
Tweet

More Decks by Mike van Riel

Other Decks in Technology

Transcript

  1. 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
  2. https://joind.in/9937 4 CodeConnexx 7 November 2013 About me • I

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

    am Mike van Riel • Lead Developer for phpDocumentor • Software Composer at Ingewikkeld
  4. 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
  5. 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
  6. https://joind.in/9937 10 CodeConnexx 7 November 2013 Quality Assurance • Automated

    tests • Coding style • Monitoring • Metrics and trends
  7. 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.
  8. https://joind.in/9937 14 CodeConnexx 7 November 2013 Why? • Automated, less

    error-prone • Continuous, always available • Transparent for everyone • Reduces defects
  9. https://joind.in/9937 16 CodeConnexx 7 November 2013 Commit / push CI

    polls VCS Rinse and repeat Run steps Report failure Success
  10. https://joind.in/9937 18 CodeConnexx 7 November 2013 Environments • CruiseControl /

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

    • Extensible with a lot of plugins • Integrates nicely with PHP QA Tools
  12. https://joind.in/9937 22 CodeConnexx 7 November 2013 What for? Mess detection

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

    tests • Integration or system tests • Acceptance tests
  14. 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
  15. https://joind.in/9937 25 CodeConnexx 7 November 2013 Copy/paste detection • Prevents

    copy / paste coding • Detects refactoring hotspots • Reduces maintenance costs
  16. 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
  17. 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
  18. https://joind.in/9937 29 CodeConnexx 7 November 2013 PHPDocumentor • API Reference

    Documentation • Class Diagram • Documentation validation Especially useful for open source projects
  19. 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
  20. 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 
  21. 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 
  22. https://joind.in/9937 34 CodeConnexx 7 November 2013 “The next few slides

    demonstrate how you would usually install Jenkins; but not today”
  23. 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 
  24. 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
  25. 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
  26. 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 
  27. 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 
  28. https://joind.in/9937 44 CodeConnexx 7 November 2013 Configuring Jenkins • Configure

    security • Configure mail settings • Install additional plugins • Github • IRC
  29. 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